大数阶乘问题,如果只简单的相乘,会出问题。因为int只有32位,并不能存储这么大的数,必须按位进行计算。 CODE: #include <iostream> #include <vector> using namespace std; int main() { cout<<"请输入要计算的阶乘:"; int n; cin>>n; //结果容器 vector<int> result; //将1的阶乘保存起来 result.push_back(1); vector<int>::iterator iter; //两个临时变量,用于暂存进位 int temp1=0,temp2=0; //从2开始 for(int i=2;i<=n;i++) { for(iter=result.begin();iter!=result.end();++iter) { //上一位有进位 if(temp1>0) { //先保存起来进位 temp2=((*iter*i)+temp1)/10; //该位实际为 *iter=((*iter*i)+temp1)%10; } else//如果上一位没有进位 { //保存进位 temp2=(*iter*i)/10; //实际位 *iter=(*iter*i)%10; } //保存,以备下一位使用 temp1=temp2; } //如果有进位 while(temp1) { result.push_back(temp1%10); temp1/=10; } } //反序输出 vector<int>::reverse_iterator iter2; for(iter2=result.rbegin();iter2!=result.rend();++iter2) cout<<*iter2; cout<<endl; cout<<"共有:"<<result.size()<<"位!"<<endl; return 0; }