依旧
2026-05-04 20:52:40
发布于:广东
由于在本赛季(2026)早期,有个逼“请教”了科技的力量将很难的题“解”了出来,被网友们"问候"
其实吧,非常简单
#include<iostream>
using namespace std;
int main(){
int a,b;
cin>>a>>b;
cout<<a+b;
}
但是,我刚刚学完高精度
首先,定义(不必多言)
然后:做高精度之前的是
1,输入。
2,将a,b反转(补签导0非常麻烦)
3,在后面加0,~~万一越界了...........~~
然后:高精度的核心!
先用sum保存(算上进位)
再把sum的个位丢进ans的第i位
再把sum的十位丢进ans的第i+1位
因为前文我们反转了a,b
#include<bits/stdc++.h>
using namespace std;
char a[911], b[911], ans[114514];
void handleCarry(int n) {
while (ans[n] > '9') {
ans[n] -= 10;
n++;
ans[n]++;
}//we use n++ instead of something like n--.
}//because we reverse a and b.
int main() {
cin >> a >> b;
int a1 = strlen(a), b1 = strlen(b);
int n = max(a1, b1);
n++; // solve question like 99+1=100;
// lt is more easily that use reverse to instead for+swap
reverse(a, a + a1);
reverse(b, b + b1);
// 把较短的数字补上 '0',防止越界
//we use n-al or n-bl to add 0 because we reverse a and b.
for (int i = a1; i < n; i++) a[i] = '0';
for (int i = b1; i < n; i++) b[i] = '0';
for (int i = 0; i <= n; i++) ans[i] = '0';
//now we can use 高精度
for (int i = 0; i < n; i++) {
int sum = (a[i] - '0') + (b[i] - '0') + (ans[i] - '0');//use aslLL to remember
ans[i] = (sum % 10) + '0';
ans[i + 1] = (sum / 10) + '0';
}
// solve problem like 9+1=10
for (int i = 0; i <= n; i++) {
handleCarry(i);
}
int start = n;
while (start > 0 && ans[start] == '0') start--;
// we reverse a and b.
for (int i = start; i >= 0; i--) {
cout << ans[i];
}
cout << endl;
return 0;
}
这里空空如也















有帮助,赞一个