

负进制数转换:和正进制一样,每次取的余数保证在0 – r-1之间。(例如r=-16,则余数应该在0-15)就可以直接输出。所以用系统的“%”运算符的时候必须注意检查是不是在该范围(可能在r+1~0),否则就调整。
调整的方法是:如果余数<0,那么:余数-=r;商++;
正确性证明:
(商+1)×除数+(余数-除数)=商除数+除数+余数-除数=商×除数+余数=被除数
了解了上面这些,只需要不断取余最后逆序输出就行啦
AC代码:
#include<iostream>
#include<cstdio>
using namespace std;
void zhuanhuan(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';
zhuanhuan(n/r,r);
printf("%c",m);
}
int main()
{
int n,r;
cin >> n >> r ;
cout << n << "=" ;
zhuanhuan(n,r);
cout << "(base" << r << ")" << endl ;
return 0;
}

357

被折叠的 条评论
为什么被折叠?



