基础练习 阶乘计算

 时间:2024-10-17 08:19:29

1、我把阶乘的结果放到了一个数组里,数组大小为3000,用max表示,memset函数将数组a的每一位都初始化为0,然后令a[0]=1

基础练习 阶乘计算

2、i代表乘数,j代表数的每一位,乘数i从2开始增加到n,因为乘1积不变;j从0开始增加到max,因为数有几位是未知的,s为数的某一位乘以乘数再加上进位的值,比如24*5,s就是4*5+0=20(这是还没有进位,即为0),然后计算进位,为2,个位为0,再进入循环,s为2*5+2=12(带上前面的进位2),计算进位为1,十位为2,再循环,s为0*5+1=1(这里的0是数组初始化的,计算到最高位后都是0了),计算进位为0,百位为1,一直循环下去都是0了,不会改变的,最后得到结果就是120.

基础练习 阶乘计算

3、从数组的最后开始倒着查找我们计算的结果的最高位在哪里,如果出现最高位(肯定是非零的),就退出

基础练习 阶乘计算

4、找到了最高位,就从最高位输出,全部输出完后,得到的就是我们计算的结果。

基础练习 阶乘计算

5、附上完整代码:#include<iostream>#include<string.h>#define max 3000using namespace std;int main(){ int c=0;//进位 int i,j,a[max],n,s; memset(a,0,sizeof(a));//将数组全部初始化为0,该函数在string.h头文件中 a[0]=1; cin>>n; for(i=2;i<=n;i++){//乘数 for(j=0;j<max;j++){//个位,十位,百位~~~ s=a[j]*i+c;//每位乘以i并加上进位 c=s/10;//进位为积除以10的商 a[j]=s%10;//更新进位后的每一位的值 } } for(i=max-1;i>=0;i--){//从数组最末尾开始查找阶乘的最高位(非零的) if(a[i]) break; } for(j=i;j>=0;j--){//从阶乘最高位开始输出 cout<<a[j]; } return 0;}

6、代码通过,计算1000的阶乘也完全不虚。

基础练习 阶乘计算
基础练习 阶乘计算
  • 开胃仔姜的做法
  • 苹果手机如何下载51talk?
  • 360安全卫士如何强力修复浏览器首页
  • HDMI/VGA转接线连接苹果Mac显示器没图像?
  • 怎样才能将学习英语的过程融入生活中?
  • 热门搜索
    七夕节手抄报 爱祖国手抄报内容简短 关于古诗的手抄报 天下国家手抄报 清明节手抄报内容简短 禁毒手抄报内容写什么 扶贫手抄报 汉字手抄报图片 元宵节手抄报图片大全简单又漂亮 扫黑除恶手抄报