版权声明:本文为博主原创文章,欢迎转载。如有问题,欢迎指正。 https://blog.csdn.net/weixin_42172261/article/details/88871199
在网上找到大神的代码,回溯过程中直接打印,不用存数组。
需要注意的是每次求余过程中不能是负数。如果是负的,整数部分加一,余数部分为r的绝对值减n%r
#include <iostream>
#include <cstdio>
using namespace std;
char str[25]={'0','1','2','3','4','5','6','7',\
'8','9','A','B','C','D','E','F','G','H','I','J'};
void change(int n, int r)
{
if (n==0) return;
if (n>0 || n%r==0){
change(n/r, r);
printf("%c", str[n%r]);
return;
}else{
change(n/r+1, r);
printf("%c", str[n%r-r]);
return;
}
}
int main()
{
int n, r;
cin>>n>>r;
printf("%d=", n);
change(n, r);
printf("(base%d)", r);
return 0;
}