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