博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
高精度阶乘
阅读量:5023 次
发布时间:2019-06-12

本文共 1424 字,大约阅读时间需要 4 分钟。

1 #include
2 #include
3 using namespace std; 4 int main() 5 { 6 int clong=1,ans=0,n,a[100000]={
0}; 7 a[1]=1; 8 cin>>n; 9 int i,j; 10 for(i=1;i<=n;i++) 11 { 12 for(j=1;j<=clong;j++) 13 a[j]=a[j]*i; //每次求出阶乘的值14 for(j=1;j<=clong-1;j++) 15 { 16 a[j+1]+=a[j]/10; //大于10的放前面 17 a[j]%=10; //留下一位18 } 19 while(a[clong]>=10) 20 { 21 clong++; 22 a[clong]=a[clong-1]/10; //大于10的放前面 23 a[clong-1]%=10; //留下一位24 25 } 26 } 27 for(i=clong;i>=1;i--) 28 cout<

 

为了弄懂这个代码,还是用代数的方法。。。求5!的值

I=1

 a[1]=a[1]*i=1*1=1

J=1.j<=0这个条件不满足,跳出循环

A[1]>=10这个条件不满足,跳出循环。

I=2

A[1]=a[1]*i=1*2=2

J=1.j<=0这个条件不满足,跳出循环

A[1]>=10这个条件不满足跳出循环

I=3

A[1]=a[1]*i=2*3=6

仍旧跳过两个循环

I=4

A[1]=a[1]*i=6*4=24

J=1,j<=0这个条件不满足,跳出循环

A[1]>=10.

Clong=2.a[2]=a[1]/10=2.a[1]=a[1]%10=4

A[2]=2>=10不满足条件,跳出循环

I=5

A[1]=a[1]*i=4*5=20

A[2]=a[2]*i=2*5=10

J=1.j<=1

A[2]=a[2]+a[1]/10=10+20/10=12.a[1]%10=0

A[2]=10>=10

Clong=3.a[3]=a[2]/10=12/10=1.a[2]=a[2]%10=12%10=2

A[3]=1>=10这个条件不满足,跳出循环

跳出外层循环

I=3输出a[3]=1

I=2输出a[2]=2

I=1输出a[1]=0

得到结果5!=120

这个算法就是把一个数拆成若干位存进数组a中,对于每次要乘的i,使每个数字都乘一遍i,然后在进行相除或区模运算更新值保证一个下标储存一个数字。

转载于:https://www.cnblogs.com/peppa/p/8538376.html

你可能感兴趣的文章
UVA - 1103 Ancient Messages
查看>>
《数据挖掘与数据化运营实战 思路、方法、技巧与应用》—— 读书笔记
查看>>
office note 解决标签页消失的问题
查看>>
现代密码学:RSA算法
查看>>
Core Image 制作自己的美图秀秀
查看>>
每天一个随笔
查看>>
-------------------python博客目录:-------------------
查看>>
【CSS3】用i标签用作小图标
查看>>
ecshop 网站
查看>>
随机森林(Random Forest)
查看>>
cat命令
查看>>
关于Socket的经验小结
查看>>
JVM内存模型 二
查看>>
[译]SSL/TLS真的被BEAST攻击攻破了吗?真实情况是怎样的?我应该做什么?
查看>>
新建我的 第一个maven项目
查看>>
ecshop 2.7.x 批量测试
查看>>
SQL数据库约束
查看>>
【转载】Dojo Grid(二)
查看>>
iptables
查看>>
微信公众平台开发(97) 图文消息
查看>>