洛谷 P1017 进制转换

洛谷 P1017 进制转换

题意

给你一个数,让你用负进制来进行表示。输入是两个数,一个是要表示的数,另一个是进制数。

解题思路

看的题解,这个有点蒙。

首先答题思路就是用r来进行模运算,但是模的过程中可能出现负数,这个就不好了,我们需要从上一位来进行借1。

这里把余数从负数转换为整数的方法是本身减去进制数(注意,这个进制数是负数,其实就是加上绝对值),然后商需要加1。

代码实现

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
void solve(int n, int r)
{
	if(n==0) return ;
	int m=n%r;
	if(m<0)
	{
		m-=r;
		n+=r;
	}
	if(m>=10) m='A'+m-10;
	else m+='0';
	solve(n/r, r);
	printf("%c", m);
	return ;
}

int main()
{
	int n, r;
	scanf("%d%d", &n, &r);
	printf("%d=", n);
	solve(n, r);
	printf("(base%d)", r);
	return 0;
}
欢迎评论交流!
原文地址:https://www.cnblogs.com/alking1001/p/11455411.html