Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
105590 | 梁晨熙 | 高精度加法 | C++ | 通过 | 100 | 0 MS | 264 KB | 1012 | 2023-10-07 13:34:00 |
#include <bits/stdc++.h> using namespace std; string a_,b_,a,b; int c[114514]; int maxl; signed main() { cin >> a_; cin >> b_; //反过来 for(int i = a_.length()-1; i >= 0; i--) { a += a_[i]; } for(int i = b_.length()-1; i >= 0; i--) { b += b_[i]; } //补零 if(a_.length()>b_.length()) { for(int i = 1; i <= a_.length()-b_.length(); i++)b+='0'; } if(b_.length()>a_.length()) { for(int i = 1; i <= b_.length()-a_.length(); i++)a+='0'; } maxl = max(a.length(),b.length()); //模拟竖式 for(int i = 0; i < maxl; i++) { c[i] += a[i]+b[i]-'0'-'0';//加起来,注意是+=,因为有上一个的进位 c[i+1] += c[i]/10;//进位到下一位 c[i]%=10;//完成进位了,多出来的不要了 } //例如99+1 = 100, 那么会产生多一位 if(c[maxl]) { maxl++; } //输出,因为算的是反过来的,所以输出再反过来,就正常了 for(int i = maxl-1; i >= 0; i--) { cout << c[i]; } return 0; }