用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c++代码库

大数阶乘和大数加法 用高精度计算出S=1!+2!+3!+…+n!(n ≤ 50)

2019-07-30 作者:Playboy_lh举报

[c++]代码库

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    int arr[10000] = {0}, a, brr[10000] = {0};
    while(cin >> a)
    {
        int count = 1, count1 = 1; ///count为阶乘数组位数,count1为结果数组位数;
        memset(arr, 0, sizeof(arr));
        memset(brr, 0, sizeof(brr));
        arr[0] = 1;
        for(int i = 1; i <= a; i++)
        {
            ///阶乘
            for(int j = 0; j < count; j++)
            {
                arr[j] *= i;
            }
            for(int j = 0; j < count; j++)
            {
                if(arr[j] >= 10)
                {
                    arr[j + 1] += arr[j] / 10;
                    arr[j] %= 10;
                }
            }
            while(arr[count])
            {
                arr[count + 1] += arr[count] / 10;
                arr[count] %= 10;
                count++;
            }
 
 
            ///plus
            count1 = count;
            for(int i = 0; i < count; i++)
            {
                brr[i] += arr[i];
                if(brr[i] >= 10)
                {
                    brr[i + 1] += brr[i] / 10;
                    brr[i] %= 10;
                }
            }
            while(brr[count1])
            {
                brr[count1 + 1] += brr[count1] / 10;
                brr[count1] %= 10;
                count1++;
            }
        }
 
        for(int i = count1 + 1; i >= 0; i--) ///输出
        {
            if(brr[i] != 0)
            {
                for(int j = i; j >= 0; j--)
                    cout << brr[j];
                cout << endl;
                break;
            }
        }
    }
    return 0;
}

[代码运行效果截图]


大数阶乘和大数加法 用高精度计算出S=1!+2!+3!+…+n!(n ≤ 50)


分享到:
更多

网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。