如 十进制数-7转为他的-2进制
-7%-2=-1 但是由于余数不能为负数。因此我们想到一个方法
对于 被除数÷除数=商…余数
被除数÷余数=(商+1)…(余数-除数) 二者等价
比如 -7%-2=3…-1
-7%-2=4…1 因此可以借助这个思想将负的余数转为正
代码如下:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
void solve(int n,int m)
{
if(n==0)
return;
int r=n%m;//r为余数
if(r<0)
{
r=r-m;//将余数转为正
solve(n/m+1,m);//为保证等式不变,商要+1
}
else
{
solve(n/m,m);
}
if(r>=10)//余数超过10的按照16进制的转换法则 ABCDE......
r='A'+r-10;
else
r=r+'0';
printf("%c",r);
}
int main()
{
int n,m;
cin>>n>>m;
cout<<n<<"=";
solve(n,m);
cout<<"(base"<<m<<")"<<endl;
}