P1017 进制转换
10进制->-r进制
需要注意的是负数取余可能结果小于0,需要借位(从上一位借)
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
string a="0123456789ABCDEFGHIJKLMN";//0~20
int b[50];
int main()
{
int n,r;
scanf("%d%d",&n,&r);
int i=0;
printf("%d=",n);
while(n)
{
int u=n%r;
n/=r;
if(u<0) //借位
{
u-=r;
n++; //本位-(-r)相当于向上一位借了一个-1所以要加上去
}
b[++i]=u;
}
for(int j=i;j>=1;j--)
printf("%c",a[b[j]]);
printf("(base%d)",r);
return 0;
}