洛谷1017進変換(負進変換)
6527 ワード
ネット上で大神のコードを見つけて、遡及の過程の中で直接印刷して、配列を保存する必要はありません.余剰を求めるたびに負の数にならないことに注意してください.負の場合、整数部に1を加算し、残数部はrの絶対値からn%rを減算する
#include
#include
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;
}