高精加+高精乘
2024-09-23 22:03:36
发布于:云南
5阅读
0回复
0点赞
为什么会变成这样呢?(为什么会变成绿标题呢?)
#include<bits/stdc++.h>
using namespace std;
int a[1005],b[1005],c[1005];
string add(string s1,string s2){
memset(a,0,sizeof a);
memset(b,0,sizeof b);
memset(c,0,sizeof c);
int l1 = s1.size(),l2 = s2.size();
for(int i = 0;i < l1;i++) a[l1 - i - 1] = s1[i] - '0';
for(int i = 0;i < l2;i++) b[l2 - i - 1] = s2[i] - '0';
int l = max(l1,l2);
for(int i = 0;i < l;i++){
c[i] += a[i] + b[i];
if(c[i] >= 10){
c[i] -= 10;
c[i + 1]++;
}
}
while(c[l] == 0) l--;
string ans = "";
for(int i = l;i >= 0;i--) ans += c[i] + '0';
return ans;
}
string sums(string s1,string s2){
memset(a,0,sizeof a);
memset(b,0,sizeof b);
memset(c,0,sizeof c);
int l1 = s1.size(),l2 = s2.size();
for(int i = 0;i < l1;i++) a[i] = s1[l1 - i - 1] - '0';
for(int i = 0;i < l2;i++) b[i] = s2[l2 - i - 1] - '0';
for(int i = 0;i < l1;i++){
for(int j = 0;j < l2;j++){
c[i + j] += a[i] * b[j];
if(c[i + j] >= 10){
c[i + j + 1] += c[i + j] / 10;
c[i + j] %= 10;
}
}
}
int l = l1 + l2;
while(c[l] == 0) l--;
string ans = "";
for(int i = l;i >= 0;i--) ans += c[i] + '0';
return ans;
}
int main(){
int n; cin >> n;
string ans = "0";
for(int i = 1;i <= n;i++){
string k = "1";
for(int j = 2;j <= i;j++) k = sums(k,to_string(j));
ans = add(ans,k);
}
cout << ans;
return 0;
}
全部评论 1
因为是国赛所以自动标绿了(
2024-10-19 来自 广东
0
有帮助,赞一个