
最开始我写出来的
#include<iostream>
using namespace std;
int main()
{
int a = 0, b = 0, n = 0;
cin >> a >> b >> n;
int num = a + b;
long long i = 1;
if (!num)
{
cout << 0;
return 0;
}
while (i <= num)
{
i *= n;
}
i /= n;// 此处i存储的是要打印的那个新的进制的数字的最高权重位上的权重
while (i != 1)
{
cout << num / i;
num %= i;
i /= n;
}
cout << num;
return 0;
}
一开始写出来的不知道哪里是错的,然后就去过年去了。过完年的今天晚上。经过大致的思考之后,就把错误原因找出来了。 即第一个while中 i <= num 等于不能省。 因为如果把64转为8进制 则输出的就是80.为什么会这样想想就知道了。
大众普遍的版本 (内含没见过的reverse函数)
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a, b, n, i = 0;
cin >> a >> b >> n;
a += b;
int arr[32];
while (a)
{
b = a % n;
arr[i++] = b;
a /= n;
}
reverse(arr, arr + i);
for (int j = 0; j < i; j++)
{
cout << arr[j];
}
if (!i)
{
cout << 0;
}
return 0;
}
本文探讨了一段C++代码在转换进制时出现的问题,通过实例展示了初始代码的错误,并分析了为何在将64转换为8进制时输出为80的原因。作者提出并实现了修正方案,同时分享了一个更通用的进制转换方法,使用了数组和反转技术。此外,文章还对比了两种不同实现方式的优缺点。
334

被折叠的 条评论
为什么被折叠?



