n的阶乘,大整数

和2的n次方基本一样,只不过是把2换出了变化的i了而已,其他的判断操类似

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    while(cin>>n)
    {
        int a[50000]; //存放结果的数组a。
        int b; //b用于存放每位存放的结果。
        int r=0; //r用来表示进位的数。
        int h=1; //h用来表示运算过程中 结果a 的最高位在哪。
        a[0]=1;
        for (int i=1; i<=n; i++)
        {
            for (int j=0; j<h; j++)
            {
                b= a[j]*i+r; //两数相乘 。
                a[j]=b%10; //求该位的真实数据 。
                r=b/10; //求进位
            }
            while(r) //上面j的循环结束后,r表示最高位有无进位。
            {
                a[h++]=r%10; //如果有,最高位应再进一,并计算最高位上的余数
                r/=10; //计算最高位进一后,是否还需要进位。
            }
        }

        for (int k=h-1; k>=0; k--)
        {
            cout<<a[k];   //输出
        }
        cout<<endl;
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/tp25959/p/10272853.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、 课题内容和要求 1、系统的基本功能及要求 (1)写一个类BigInteger,并有如下成员函数operator+/ operator-/ operator*/ operator\,即整数的四则运算并重载运算符。 (2)用该大整数计算n的阶乘并显示出来。(n∈[1,100]) 注:为了简化,可不考虑负数,则遇上形如“2-4”这样的表达式需要报错。 2、程序执行过程 (1)系统从键盘读入自然数n,直到输入了合法的n为止。 (2)输出运算的结果,为便于观察结果,每输出四位中间插入空格,格式如下(例如,n=12): 12!= 4790 0160 0 (3)询问用户是否继续进行,用户选择“是”,直到输入合法为止,转(1),否则退出程序。 3、算法要求及提示 (1)因为n较大时,n!的结果将超出长整形的保存范围,因此结果不能用long int型的变量来保存。本算法要求用链表来存储。 (2)链表的每一个节点存储结果的一位数字,因此结果的输出实际上是链表的遍历问题,同时要先考虑用多少位来表示大整数。 4、其他要求 (1)输入时具备一定的容错性判断,如输入的不是数字,或输入的数超过范围等等。 (2)变量、函数命名符合规范。 (3)注释详细:每个变量都要求有注释说明用途;函数有注释说明功能,对参数、返回值也要以注释的形式说明用途;关键的语句段要求有注释解释。 (4)程序的层次清晰,可读性强。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值