N的阶层(王道)
题目描述:
输入一个正整数N,输出N的阶乘。
输入:
正整数N(0<=N<=1000)
输出:
输入可能包括多组数据,对于每一组输入数据,输出N的阶乘
样例输入:
4
5
15
样例输出:
24
120
1307674368000
#include <iostream> #include<string.h> #include<cstdio> using namespace std; struct bigInteger{ int digit[1000]; int size; void init(){//初始化 for(int i=0;i<1000;i++) digit[i] = 0; size = 0; } void set(int x){ init(); do{//每4位为一个单位分解依次存入digit中 digit[size++] = x%10000; x /= 10000; }while(x!=0); } void output(){//输出 for(int i=size-1;i>=0;i--){ if(i!=size-1) printf("%04d",digit[i]); else printf("%d",digit[i]); } printf("\n"); } bigInteger operator * (int x) const {//乘法运算符 bigInteger ret;//将要返回的高精度整数 ret.init(); int carry = 0; for(int i=0;i<size;i++){ int temp = x*digit[i]+carry;//x乘以当前位数字加上来自低位的进位 carry = temp / 10000;//计算进位 temp %= 10000;//去除进位部分 ret.digit[ret.size++]=temp;//保存该位数字 } if(carry!=0)//若最高位有进位 ret.digit[ret.size++] = carry;//保存该进位 return ret; } }a; int main() { int n; scanf("%d",&n); a.init(); a.set(1);//a的初始值位1 for(int i=1;i<=n;i++) a = a*i; a.output(); return 0; }