洛谷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;
}