UVa 623

计算N!

n上限为1000自然不能直接算。所以可以开一个数组f[],f[]每一位存N!结果的6位。如果按进制来理解,就是10^6进制:

例如 11!=39916800=11*10!=11*(3628800)=11*(3*(10^6)^1+628800*(10^6)^0)

11*628800=6916800=6*(10^6)^1+916800*(10^6)^0,

所以上式进位为6,可得 11!=(11*3+6)*(1^10)^1+916800*(10^6)^0=39916800 ,如下图

输出时高位的前导0用printf("%06d")前面的0表示输出6位,不足6位前面补零。简直完美!

参考代码:

 #include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn = ;//位数
int f[maxn];//上限1000!有2000+位,1005*6位足够了 int main()
{
int n;
while (cin>>n)
{
memset(f, , sizeof(f));
int len = ;//初始只有1位
f[] = ;//1!=1
for (int i = ; i <= n; i++)//从2开始到n求阶乘
{
int c = ;//表示进位
for (int j = ; j < len; j++) //模拟乘法,用每位来乘以i
{
int t = f[j] * i + c;
f[j] = t % ;
c = t / ;
}
if (c) f[len++] = c;//如果进位大于0,就新增一位
}
cout << n << "!" << endl;
cout << f[len - ];
for (int i = len - ; i >= ; i--)
printf("%06d", f[i]);//“%06d"的0表示若f[i]不足6位前面补0
cout << endl;
}
}

最新文章

  1. [Machine Learning] 机器学习常见算法分类汇总
  2. mysql 正则篇
  3. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(二) 之 ChatServer搭建,连接服务器,以及注意事项。
  4. HTML5基础总结
  5. 喜大普奔!Fanvas正式对外开源了,一键把Flash转为Canvas动画!移动终端动画开发不再困难。
  6. 前端js的书写规范和高效维护的方案_自我总结使用的方案
  7. 要做一款APP-解放双手
  8. Moderate 加入空格使得可辨别单词数量最多 @CareerCup
  9. 用ATL和MFC来创建ActiveX控件
  10. String 转Map(基于Guava类库)
  11. python socket编程---从使用Python开发一个Socket示例说到开发者的思维和习惯问题
  12. html5 audio play()方法部分ios机不能播放声音
  13. python线程join方法
  14. Lock锁方式解决线程安全问题
  15. xml和java对象互转:JAXB注解的使用详解
  16. 【转】Java并发编程:并发容器之ConcurrentHashMap
  17. vue-router 编程式导航
  18. USBDM RS08/HCS08/HCS12/Coldfire V1,2,3,4/DSC/Kinetis Debugger and Programmer -- Software Install
  19. velocity #parse抽象重用部分组件
  20. Haskell语言学习笔记(49)ByteString Text

热门文章

  1. spring源码学习之AOP(二)
  2. 洛谷P5071 此时此刻的光辉
  3. Java review-basic2
  4. android 数据库存取图片
  5. nginx日志修改时间格式为年月日时分秒
  6. Leetcode622.Design Circular Queue设计循环队列
  7. poj 2288 Islands and Bridges——状压dp(哈密尔顿回路)
  8. web前端学习(二)html学习笔记部分(1) -- html5新增的元素及特性等等
  9. Bundler和Minifier Visual Studio扩展
  10. Python subn函数