大数阶乘

当求阶乘的数太大的时候,结果用int甚至long无法保存,可以用一个大数组来保存结果,运算的方法和笔算乘法类似。比如456 * 6的运算步骤如下:

  1. 数组num[0],num[1],num[2]分别存储456的个位、十位、百位
  2. 每一位与6相乘,相乘的结果+上一位的进位carry 的个位存储在该数组单元
  3. 计算要向上一位进位的carry

    分享图片

#include <iostream>
using namespace std;

#define maxsize 4000

int main(){
    int num[maxsize] = {0};
    int carry,t,n;// t用于记录当前结果的位数,carry为进位
    num[0] = 1;
    int ca;
    while(cin >> n){
        t = 0;
        num[0] = 1;
        for(int i = 1; i <= n; i++){// 计算阶乘,从1开始乘到n
            carry = 0;// 
            for(int j = 0; j <= t; j++){// 对于每个结果的每一位
                ca = (num[j] * i + carry) / 10;// 计算出这一位乘以i的进位
                num[j] = (num[j] * i + carry) % 10;要保存在这一位的结果
                carry = ca;
            }
            while(carry != 0){// 每一个数如果carry!=0就说明要向上一位进位
                num[++t] = carry % 10;
                carry = carry / 10;
            }
        }
        for(int i = t; i >= 0; i--)// 输出结果
            cout << num[i];
        cout << endl;
    }
    return 0;
}

相关文章

自1998年我国取消了福利分房的政策后,房地产市场迅速开展蓬...
文章目录获取数据查看数据结构获取数据下载数据可以直接通过...
网上商城系统MySql数据库设计
26个来源的气象数据获取代码
在进入21世纪以来,中国电信业告别了20世纪最后阶段的高速发...