(盗版)大数相乘

来源:互联网 发布:转口贸易产生海关数据 编辑:程序博客网 时间:2024/06/05 04:34

//一个整型变量只能用来存贮较小的n!的值,当 n 较大时,可将阶乘值中的每一个数字放在一个一维数组的一个元素中,使用这方法,打印n!的值;

//网上各种垃圾资源,校OJ上面写了这个题,但是和真正的大数相乘不同,故我给这个取名叫盗版的大数相乘

//本题在codeblocks上面运行成功,故基本所有C/C++编译器都支持

//盗版大数相乘
#include <iostream>
using namespace std;


int main(){
    int n, i, j, w = 0, num = 1, temp, a[100];
    a[0] = 1;   //不考虑1的阶乘
    cin>>n;
    
    //每一次都在改变a[0],a[j]保留最低位,w不断进行增加num,且a[j] * i 不存在超越INT_MAX,故temp也不会。
    for(i = 2; i <= n; i++){          //n-1个元素
        for(j = 0; j < num; j++){    //每一次改变
            temp = a[j] * i + w;     
            a[j] = temp % 10;        //保留最低位
            w = temp / 10;           //保留最高位(多位)
        }
        
        //每次超过10即开始除
        while(w != 0){
            a[num] = w % 10;
            w /= 10;
            num++;
        }
    }
    
    
    for(i = num - 1; i >= 0; i--)
        cout<<a[i];
    cout<<endl;
    
    return 0;
}


原创粉丝点击