洛谷 1017 进制转换(负进制转换)

版权声明:本文为博主原创文章,欢迎转载。如有问题,欢迎指正。 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;
} 

猜你喜欢

转载自blog.csdn.net/weixin_42172261/article/details/88871199