我定义vector纯属方便
by 3_14 @ 2024-03-13 22:26:32
@[3_14](/user/913288)
```cpp
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int b;
string n,m;
char s[36];//每一位上的数字是多少
int ans[2011]; //存储答案
void init(){
for(char i = '0';i <= '9';i++) s[i-'0'] = i;
for(int i = 10;i <= 35;i++) s[i] = 'A' + i - 10;
}
int main() {
init();
cin >> b >> n >> m;
reverse(n.begin(),n.end());//翻转,个位在最低位
reverse(m.begin(),m.end());
int lenn = n.size(),lenm = m.size();
if(lenn > lenm) {
for(int i = 1;i <= lenn - lenm;i++) m += '0';
}else if(lenm > lenn) {
for(int i = 1;i <= lenm - lenn;i++) n += '0';
}
m += '0',n += '0';//让m和n位次对齐
lenn = n.size();
for(int i = 0;i < lenn;i++) {//把字符转换成int类型
if(n[i] >= '0' && n[i] <= '9') n[i] -= '0';
else n[i] = n[i] - 'A' + 10;
if(m[i] >= '0' && m[i] <= '9') m[i] -= '0';
else m[i] = m[i] - 'A' + 10;
}
int num = 0,jw = 0;
for(int i = 0;i < lenn;i++) {//加法计算
num = n[i] + m[i] + jw;
jw = num / b;
num %= b;
ans[i] = num;
}
ans[lenn] += jw;
int flag = 0;//标记首位非零
for(int i = 2010;i >= 0;i--) {//输出
if(ans[i] != 0) flag = 1;
if(flag) cout << s[ans[i]];
}
return 0;
}
```
by mooktian @ 2024-04-10 16:16:29
@[3_14](/user/913288)
### 这题就是一个高精度加法,
但是这题复杂的地方在于,不是10进制,而是b进制,最高是36位,刚好就是0~9+A~Z,最好是打个表来表示这36位数字。
第二个就是输入用 $string$ 比较方便,但是在加的时候,最好是转成 $int$ 来加比较方便。
其他的,像是个位翻转到最低位,首位非零处理,这都是高精度加法的基本操作。
by mooktian @ 2024-04-10 16:21:41