社区讨论
求调,玄关
P1009[NOIP 1998 普及组] 阶乘之和参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @m2nfhfsm
- 此快照首次捕获于
- 2024/10/24 22:58 去年
- 此快照最后确认于
- 2025/11/04 16:16 4 个月前
高精度加法有问题
CPP#include<bits/stdc++.h>
using namespace std;
string st(long long n) {
string sum="", ans="";
while(n){
ans+=n%10+'0';
n/=10;
}int l=ans.length();
for (int i = l-1; i >= 0; i--) sum+=ans[i];
return sum;
}//类型转换(long long -> string)
string jia(string s1, string s2) {
string tsum="";//结果字符串
int l1=s1.length(),l2=s2.length();
short sum[2000]={0}/*结果数组*/, a[l1+1]={2000}, b[l2+1]={2000};
for(int i = l1-1; i >= 0; i--)a[i]=s1[l1-i-1]-'0';
for(int i = l2-1; i >= 0; i--)b[i]=s2[l2-i-1]-'0';
int k=0/*进位*/;
for (int i = 0; i <= max(l1,l2); i++) {
sum[i]=a[i]+b[i]+k;
k=sum[i]/10;
sum[i]%=10;
}
bool flag=0;
for (int i = l1+l2+1; i >= 0; i--)
if(sum[i]!=0||flag)flag=1,tsum+=sum[i]+'0';
if(!flag)return "0";
return tsum;
}//高精度加法(就是这有大问题)
string chen(string s1, string s2) {
string tsum="";//结果字符串
int l1=s1.length(),l2=s2.length(), f1=0/*正向计数*/;
short a[2000]={0}, b[2000]={0}, sum[2000]={0}/*结果数组*/;
for(int i = l1-1; i >= 0; i--) a[i]=s1[i]-'0';
for(int i = l2-1; i >= 0; i--) b[i]=s2[i]-'0';
for(int i = l2-1; i >= 0 ; i--) {
int k=0/*进位*/,f2=0/*正向计数*/;
for (int j = l1-1; j >= 0; j--) {
sum[f1+f2]+=a[j]*b[i]+k;
k=sum[f1+f2]/10;
sum[f1+f2]%=10;
f2++;
}
if(k>0)sum[f1+f2]+=k;
f1++;
}bool flag=0;
for (int i = l1+l2+1; i >= 0; i--)
if(sum[i]!=0||flag)flag=1,tsum+=sum[i]+'0';
if(!flag)return "0";
return tsum;
}//高精度乘法
string jc(int n) {
string sum="1";
for(int i = 1; i <= n; i++)
sum=chen(sum,st(i))/*, cout << sum << '\n'*/;
return sum;
}//阶乘(没问题)
int main() {
/* int n;cin >> n;
string sum="0";
for (int i = 1; i <= n; i++) {
cout << sum << '\n';
sum=jia(sum,jc(i));
}
for (int i = 0; i < n; i++) {
cout << i << ' ' << jc(i) << '\n';
}
cout << sum;*/
string a,b;
cin >> a >> b;
cout << chen(a,b);
return 0;
}
玄关
回复
共 1 条回复,欢迎继续交流。
正在加载回复...