洛谷 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;
}
欢迎评论交流!