题意:求n!(0 ≤ N ≤ 10000)

思路:大数,用数组存储

1.首先要考虑数据N!的位数,因为最大是10000!,可以计算一下大概是5+9000*4+900*3+90*2+10*1=38865位,(此处没看懂,怎么求的)

可以开一个40000的int数组存放,然后用常规的方法去计算

2.但是需要改进一下,咱们知道int数组一个只存1位太浪费了,不如让它的空间发挥到极限,数组一个元素存一个不超过10^5的数,

为什么是10^5呢?见代码中的注释,改进后就一个元素存5位,这样开的数组就可以小5倍了,只需要8000就可以了

代码1:

#include<cstdio>
#include<cstring> const int N=40000;
int main(){
int ans[N];
int n,i,j,co,sum;
while(~scanf("%d",&n)){
memset(ans,0,sizeof(ans));
ans[0]=1;
for(i=2;i<=n;i++){
for(j=0,co=0;j<N;j++){//求阶乘
sum=ans[j]*i+co;//
ans[j]=sum%10;
co=sum/10;
}
}
for(i=N-1;ans[i]==0;i--);
printf("%d",ans[i]);
for(i--;i>=0;i--) printf("%d",ans[i]);
printf("\n");
}
return 0;
}

代码2:

#include<cstdio>
#include<cstring> const int N=8000;
int main(){
int ans[N];
int n,i,j,co,sum;
while(~scanf("%d",&n)){
memset(ans,0,sizeof(ans));
ans[0]=1;
for(i=2;i<=n;i++){
for(j=0,co=0;j<N;j++){//求阶乘
sum=ans[j]*i+co;//这里的sum决定了10^5,因为ans[j]<10^5,i<10^4,co<10^5,那么sum不会超出int范围;如果用10^6,则sum可能溢出。
ans[j]=sum%100000;
co=sum/100000;
}
}
for(i=N-1;ans[i]==0;i--);
printf("%d",ans[i]);
for(i--;i>=0;i--) printf("%05d",ans[i]);
printf("\n");
}
return 0;
}

hdu 1042 N!(大数)的更多相关文章

  1. HDU 1042 大数阶乘

    B - 2 Time Limit:5000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Statu ...

  2. HDU 1042 N! 參考代码

    HDU 1042 N! 题意:给定整数N(0 ≤ N ≤ 10000), 求 N! (题目链接) #include <iostream> using namespace std; //每一 ...

  3. (hdu)1042 N! 大数相乘

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1042 Problem Description Given an integer N( ≤ ...

  4. hdu 1042 N!(大数的阶乘)

    N! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  5. hdu 1042 N! java大数及判断文件末尾

    N! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submi ...

  6. HDU 1042 大数计算

    这道题一开始就采用将一万个解的表打好的话,虽然时间效率比较高,但是内存占用太大,就MLE 这里写好大数后,每次输入一个n,然后再老老实实一个个求阶层就好 java代码: /** * @(#)Main. ...

  7. HDU 1042 N!(高精度阶乘、大数乘法)

    N! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submi ...

  8. HDU 1042 N!【大数】

    N! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Subm ...

  9. HDU 5047 Sawtooth(大数模拟)上海赛区网赛1006

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5047 解题报告:问一个“M”型可以把一个矩形的平面最多分割成多少块. 输入是有n个“M",现 ...

随机推荐

  1. java查看工具jhat-windows

    Analyzes the Java heap. This command is experimental and unsupported. Synopsis jhat [ options ] heap ...

  2. java:注解(二)

    自定义注解 使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节.在定义注解时,不能继承其他的注解或接口.@i ...

  3. 分享一套C++入门基础视频

    本课程从C++起步.用户无需不论什么计算机基础,仅仅须要懂的主要的电脑操作,既可学习本课程.本课程适合在校大学生,在职人员等,通过本课程的学习,学员可掌握C++\MFC\VC++server端.网络编 ...

  4. HttpClient 模拟登录搜狐微博

    http://mengyang.iteye.com/blog/575671 第一次遇到一个这样的问题,"PKIX path building failed" 异常   详解异常:  ...

  5. 单点登录系统cas资料汇总

    http://jasig.github.io/cas/4.0.x/index.html           主页 https://jasigcas.herokuapp.com              ...

  6. Command &Prompt Here

    Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\shell\Command Prompt Here]@=" ...

  7. 网络工具的瑞士军刀netcat

    这是一个聒噪的夜晚,假设要给出个原因.可能是由于尽管我认为西班牙不纯粹,可是怎么也不至于干为人家搭台面自己不唱戏的角色吧..结束以后.我认为该玩一下素有网络瑞士军刀之称谓的netcat了. 尽管瑞士军 ...

  8. POJ 2456 Aggressive cows (二分 基础)

    Aggressive cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7924   Accepted: 3959 D ...

  9. 结缘mac

    还记得上一次买MacBookPro.是在去年的7月下旬,记得那次是我大学第一次买电脑,那时候刚准备開始研究android.听stormzhang以及android开发界的大佬们对mac开发androi ...

  10. 一条长l的笔直的街道上有n个路灯,若这条街的起点为0,终点为l,第i个路灯坐标为ai,每盏灯可以覆盖到的最远距离为d,为了照明需求,所有灯的灯光必须覆盖整条街,但是为了省电,要是这个d最小,请找到这个最小的d。

    // ConsoleApplication3.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> ...