大数乘法
把大数变成字符串和小数相乘, 其实乘法规则和手算乘法是一样的
- 从低位向高位累乘
- 进位可能上百上千,因此要对进位取模一个要点是结果和上一步的进位要先相加再取模
- 超过字符串长度的进位最后单独添加
- 因为是从低位向高位做乘法,所以最后要用algorithm的reverse();
#include<string>
#include<algorithm>
using namespace std;
string mul_string(string res,int n){
int carry=0;
int temp=0;
for(int i=0;i<res.length();i++){
temp = (res[i]-'0')*n;
if(carry==0){
res[i]=temp%10+'0';
}
else{
res[i]=(temp+carry)%10+'0';//加起来可能要进位,所以先加再模
}
carry=(carry+temp)/10;
}
while(carry!=0){
res.append(to_string(carry%10));
carry/=10;
}
return res;
}
int main(){
int n;
while(cin>>n){
string res="1";
for(int i=2;i<=n;i++){
res=mul_string(res,i);
}
reverse(res.begin(),res.end());
cout<<res<<endl;
}
}

京公网安备 11010502036488号