华为OJ软件训练题(中级)——可怕的阶乘(大数处理)
发布时间:2020-12-14 02:36:37 所属栏目:大数据 来源:网络整理
导读:题目标题: 计算阶乘n!是一件可怕的事情,因为当n并不是很大时,n!将是一个很大的值。例如13!?=?6227020800,已经超过了我们常用的unsigned?int类型的取值范围。请设计一个程序,使其可以计算100以内的数的阶乘,结果用字符串的形式输出 详细描述: 接口说明
题目标题:
详细描述:
原型: void?CalcNN(int?n,?char?*pOut) 输入参数: int?n?需要计算的阶乘数 输出参数: char?*pOut?结算结果,内存由调用者负责管理 返回值: 无 限制: 无 举例: ? 对此这种类型题目基本考察的都是大整数计算,还有整数和字符之间转换,细心就好,没有复杂的算法思想。 #include<iostream> //#include<string> //#include<algorithm> //#include<cmath> //#include<vector> //#include<stack> //#include<iomanip> using namespace std; void CalcNN(int n,char *pOut) { int i=0,j; int c,tmp=n,slen; char ct; if(n==0 || n==1) { pOut[0]='1'; pOut[1]=0; return; } while(tmp) { pOut[i++]=(tmp%10)+'0'; tmp=tmp/10; } pOut[i]=0; slen=strlen(pOut); //cout<<slen<<endl; for(i=n-1;i>1;i--) { c=0; for(j=0;j<slen;j++) { tmp=i*(pOut[j]-'0')+c; if(tmp>9) { pOut[j]=(tmp%10)+'0'; c=tmp/10; } else { pOut[j]=tmp+'0'; c=0; } } if(c!=0) { while(c) { pOut[slen++]=(c%10)+'0'; c/=10; } pOut[slen]=0; } // cout<<i<<" "<<pOut<<endl; } for(i=0,j=slen-1;i<j;i++,j--) { ct=pOut[j]; pOut[j]=pOut[i]; pOut[i]=ct; } return; } int main() { char *ss=(char *)malloc(1000*sizeof(char)); CalcNN(13,ss); cout<<ss<<endl; return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |