1042 N!
2015-07-25 01:36
246 查看
N!
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 65272 Accepted Submission(s): 18669
[align=left]Problem Description[/align]
Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!
[align=left]Input[/align]
One N in one line, process to the end of file.
[align=left]Output[/align]
For each N, output N! in one line.
[align=left]Sample Input[/align]
1
2
3
[align=left]Sample Output[/align]
1
2
6
大数阶乘,关键是考虑进位问题,什么时候进位,有时候也是要考虑的,具体看代码注释....
我这里用的是一万进位,因为一万的平方才一亿,不超过Int 范围,但是十万乘以十万就超过了.....
这样的进位比普通求阶乘用的十进制快了很多倍,省去了十进制的没用的进位过程.....
#include<stdio.h> #include<string.h> int main() { int n;int i,j,k,x[10005],s; while(~scanf("%d",&n)) { memset(x,0,sizeof(x)); x[0]=k=1;s=0;//初始化 for(i=2;i<=n;++i)// i 控制的是当前乘多少 { for(j=0;j<k;++j)// j 控制的是模拟该数的第几位 { x[j]=x[j]*i+s;//乘法进位 s=0;//每次进位之后都清零 if(x[j]>=10000)//考虑进位的情况... { s=x[j]/10000; //需要进位的先存下来,下次再加,想想为什么 x[j]%=10000; } } if(s!=0)//这个是为了判断最高位数,只要最高位进位了,就增加 1 ; { ++k; x[j]=s; s=0; } } printf("%d",x[--k]);//第一位正常输出 for(i=k-1;i>=0;i--)//有了数据记录最高位,输出也就比较方便了..... { printf("%04d",x[i]);//注意1万进位的输出格式 } printf("\n"); } return 0; }
相关文章推荐
- IOS开发学习记录第3天之C语言学习
- Code Blocks 配置 MinGW Distro 使用boost库
- IOS开发学习记录第2天之熟悉Xcode常用快捷键
- IOS开发学习记录第1天之熟悉Mac常用快捷键
- 学艺不精而羞愧--论C++模板类的使用
- HTML--Note2--list
- C# 发送邮件
- 一个nginx_reuseport 简单补丁实现
- Leetcode 9 Palindrome Number
- Oracle VirtualBox 安装增强工具包:“building the main guest additions module 失败” 原因及解决方法
- 重新定义统一的用户访问界面:StoreFront 3.0安装和配置
- 超级链接伪类应用实例
- sublimeCodeIntel 的配置
- 关于字符集,编码格式,大小端的简单总结
- 使用git bash提交代码到github
- 1047 Integer Inquiry
- 猜数字-暴力枚举
- ply 点云文件格式
- 棋盘问题-DFS
- java web 上传文件