大数阶乘
发布时间:2020-12-14 05:14:29 所属栏目:大数据 来源:网络整理
导读:当求阶乘的数太大的时候,结果用 int 甚至 long 无法保存,可以用一个大数组来保存结果,运算的方法和笔算乘法类似。比如 456 * 6 的运算步骤如下: 数组num[0],num[1],num[2]分别存储456的个位、十位、百位 每一位与6相乘,相乘的结果+上一位的进位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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |