华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1923|回复: 1
打印 上一主题 下一主题

1!+2!+***100!

[复制链接]

61

主题

147

帖子

563

积分

超级版主

Rank: 8Rank: 8

积分
563
跳转到指定楼层
楼主
发表于 2014-11-1 14:54:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
先做简单的,100! 千万注意,中间进位的时候用的是while不是if。思考为什么?
  1. #include <iostream>
  2. using namespace std;
  3. int a[200]; //定义了a[0]***a[9]共10个元素
  4. int i,j,k;
  5. int l;
  6. int x;
  7. int main()
  8. {
  9.     a[0]=1;
  10.     l=0;  //乘法默认的初值是1
  11.     for (k=1; k<=100; k++)  //做 100次连乘
  12.     {
  13.         for (i=0; i<=l; i++) a[i]=a[i]*k;  //每位数字都乘法
  14.         for (i=0; i<=l-1; i++)  //进位  标程
  15.         {
  16.             x=a[i];
  17.             a[i]=x%10;
  18.             a[i+1]=a[i+1]+x/10;
  19.         }
  20.         while (a[l]>=10)    //因为不止一次进位,所以不用if用while
  21.         {
  22.             x=a[l];
  23.             a[l]=x%10;
  24.             a[l+1]=a[l+1]+x/10;
  25.             l++;
  26.         }
  27.     }
  28.     for (i=l; i>=0; i--) cout<<a[i];
  29.     return 0;
  30. }
复制代码
回复

使用道具 举报

61

主题

147

帖子

563

积分

超级版主

Rank: 8Rank: 8

积分
563
沙发
 楼主| 发表于 2014-11-1 14:59:24 | 只看该作者
那么改进的就是这样
  1. #include <iostream>
  2. using namespace std;
  3. int a[200],s[200]; //a表示单个的阶乘,s表示总和。
  4. int i,j,k;
  5. int l;
  6. int x;
  7. int main()
  8. {
  9.     a[0]=1;
  10.     l=0;  //乘法默认的初值是1
  11.     for (k=1; k<=10; k++)  //做 100次连乘
  12.     {
  13.         for (i=0; i<=l; i++) a[i]=a[i]*k;  //每位数字都乘法
  14.         for (i=0; i<=l-1; i++)  //进位  标程
  15.         {
  16.             x=a[i];
  17.             a[i]=x%10;
  18.             a[i+1]=a[i+1]+x/10;
  19.         }
  20.         while (a[l]>=10)    //因为不止一次进位,所以不用if用while
  21.         {
  22.             x=a[l];
  23.             a[l]=x%10;
  24.             a[l+1]=a[l+1]+x/10;
  25.             l++;
  26.         }
  27.         for (i=0;i<=l;i++) s[i]=s[i]+a[i];
  28.         for (i=0; i<=l-1; i++)  //进位  标程
  29.         {
  30.             x=s[i];
  31.             s[i]=x%10;
  32.             s[i+1]=s[i+1]+x/10;
  33.         }
  34.         while (s[l]>=10)    //这里其实可以用if 因为加法只会进最多一次
  35.         {
  36.             x=s[l];
  37.             s[l]=x%10;
  38.             s[l+1]=s[l+1]+x/10;
  39.             l++;
  40.         }

  41.     }

  42.     for (i=l; i>=0; i--) cout<<s[i];
  43.     return 0;
  44. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-12-27 01:29 , Processed in 0.108926 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表