我的代码有啥问题 我没看出来

B3849 [GESP样题 三级] 进制转换

0x3E @ 2024-07-03 18:59:12

我的代码有啥问题 我没看出来

#include <iostream>
using namespace std;

char arr[1000010];

int main() {
    int n, r, ans = 0;
    cin >> n >> r;
    int a = n;
    while (a >= 1) {
        int i = a % r;
        if (i >= '0' && i <= '9')
            arr[ans++] = i;
        else
            arr[ans++] = i + 'A' - 1;
        a /= r;
    }
    for (int j = ans - 1; j >= 0; j --)
        cout << arr[j];
    return 0;
}

by _Z_F_R_ @ 2024-07-03 19:04:45

i 是 int 类型但:

if (i >= '0' && i <= '9')

by 0x3E @ 2024-07-03 20:31:25

哦!谢谢提醒,我明白咋做了

因为

i

int

类型, 所以我这样改了一下

int i = a % r;
if (i >= 10)

然后我犯了一个错误,

n % r

未-10,会导致字母‘N’变成‘X’

而且0 ~ 9 的数字没有

+ '0'

也会导致ASCII码出乱。


by 0x3E @ 2024-07-03 20:35:17

这是我的

AC

代码

#include <iostream>
using namespace std;

char arr[1000010];

int main() {
    int n, r, ans = 0;
    cin >> n >> r;
    int a = n;
    while (a >= 1) {
        int i = a % r;
        if (i >= 10)
            arr[ans++] = i + 'A' - 10;
        else
            arr[ans++] = i + '0';
        a /= r;
    }
    for (int j = ans - 1; j >= 0; j --)
        cout << arr[j];
    return 0;
}

谢谢提醒!


|