最开始我写出来的
#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;
}
|