有人帮我看看,哪里有问题?

P1604 B进制星球

我定义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


|