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