51Nod 1057 N的阶乘(基础题???数论???)
来源:互联网 发布:windows更新 编辑:程序博客网 时间:2024/06/08 16:25
输入N求N的阶乘的准确值。
Input
输入N(1 <= N <= 10000)
Output
输出N的阶乘
Input示例
5
Output示例
120
把这种题放在基础题。。。也太打击人的自信了吧。。。
基础题都刷不了。。。
本来套了个大数相加的板子,一种是大数乘大数,一种是大数乘整数,前者MLE,后者TLE。
然后看了下题解发现…阶乘竟然还能这样求…长见识了!
每八位存一次,如果乘积超过八位就进位。小学乘法。。。(至于存多少位完全看自己意愿)
举个例子模拟下过程:比如,21乘以6,然后得126再乘以12
假设以二位为基准存在数组里:
21*6得出的126,使a[0]=26,a[1]=1;
接着计算26*12得312,使a[0]=12,百位的3进位,之前的百位a[1]=1, 1 * 12+3=15,使a[1]=15。
这样直接格式化逆序输出数组a就是想要的结果了。
大神就是大神,打死我我也想不出来这种做法。
但是,虽然我不会,但是我可以学!嗯!
现在,我学会了。
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<string>#include<algorithm>using namespace std;typedef long long int LL;const int MAX(100000000);LL ans[100000+50];int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n; cin>>n; ans[0]=1; int len=0; for(int i=1; i<=n; i++) { int temp=0; for(int j=0; j<=len; j++) { ans[j]=ans[j]*i+temp; temp=ans[j]/MAX; ans[j]%=MAX; } if(temp>0)//进位 ans[++len]=temp; } printf("%lld",ans[len]); for(int i=len-1;i>=0;i--) printf("%08lld",ans[i]); printf("\n");}
阅读全文
0 0
- 51Nod 1057 N的阶乘(基础题???数论???)
- 51Nod 1057 N的阶乘(数论)
- 51Nod 1056 - N的阶乘的长度(数论)
- 51nod 1057 N的阶乘
- 51nod 1057 N的阶乘
- 51nod 1057 N的阶乘
- 51nod 1057 N的阶乘
- 51nod 1057 N的阶乘
- 51Nod 1057 N的阶乘
- 51nod 1057 N的阶乘
- 51Nod-1057-N的阶乘
- 51 nod 1057 n的阶乘
- 51Nod 1057 N的阶乘
- 51nod 1057 N的阶乘
- 1057 N的阶乘 【数论】
- 51nod 1057 N的阶乘(大数-划分)
- 51nod 1057 N的阶乘(大数问题)
- 51nod N的阶乘
- 在VSCode中使用DuilibPreview预览XML布局
- c++之继承基础知识
- pandas —Series创建和索引
- 反向代理服务器
- Floyed算法大连理工大学数据结构上机第四章
- 51Nod 1057 N的阶乘(基础题???数论???)
- WCF中使用Swagger框架实现接口文档自动化
- FTL (Flash translation layer) 闪存转换层
- Protocol buffer序列化及其在微信蓝牙协议中的应用
- JDBC(Java Database Connectivity)
- Server Connection Closed Description:The server requested closed the connection before the transacti
- 猜字母
- jsp引入js文件找不到,我发誓路径绝对正确
- 一些Eclipse报错记录