社区讨论
高精加和高精乘的函数没有问题,但过不了,求助,感谢感谢感谢!!!
P1009[NOIP 1998 普及组] 阶乘之和参与者 3已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @lo1t0cof
- 此快照首次捕获于
- 2023/10/23 02:30 2 年前
- 此快照最后确认于
- 2023/11/03 03:06 2 年前
CPP
#include<iostream>
using namespace std;
string cheng(string s1,string s2){//高精乘
int a[100000],b[100000],c[100000];
string ans="";
int la,lb,lc;
la=s1.length();
lb=s2.length();
for(int i=0;i<la;i++){
a[la-i]=s1[i]-'0';
}
for(int i=0;i<lb;i++){
b[lb-i]=s2[i]-'0';
}
lc=la+lb;
for(int i=1;i<=la;i++){
for(int j=1;j<=lb;j++){
c[i+j-1]+=a[i]*b[j];
c[i+j]+=c[i+j-1]/10;
c[i+j-1]%=10;
}
}
while(c[lc]==0&&lc>1) lc--;
for(int i=lc;i>=1;i--){
ans+=c[i]+'0';
}
return ans;
}
string jia(string a,string b)//高精加
{
string ans;
int na[100000]= {0},nb[100000]= {0};
int la=a.size(),lb=b.size();
for(int i=0; i<la; i++)//a倒置放入na数组
na[la-1-i]=a[i]-'0';
for(int i=0; i<lb; i++)//b倒置放入nb
nb[lb-1-i]=b[i]-'0';
int lmax=la>lb?la:lb;
for(int i=0; i<lmax; i++){
na[i]+=nb[i];
na[i+1]+=na[i]/10;//进位
na[i]%=10;//进位后余下的
}
if(na[lmax])
lmax++;
for(int i=lmax-1; i>=0; i--)//把结果赋值给字符串ans
ans+=na[i]+'0';
return ans;
}
int main(){
int n;
cin>>n;
string a="1";
string ans="0";
for(int i=1;i<=n;i++){
string b="";
if(i<10) b=i+'0';
else{
b=i/10+'0';
b+=i%10+'0';
}
a=cheng(a,b);
ans=jia(ans,a);
}
cout<<ans<<endl;
return 0;
}
回复
共 7 条回复,欢迎继续交流。
正在加载回复...