将十进制N转换成负进制数为基数的数
#include <bits/stdc++.h>
using namespace std;
#define ll long long
char dig[21]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K'};
ll r,base,m;//r->余数 r<0
char ap[10000];
void ten2R(ll a,ll b)
{
printf("%lld = ", a);
int cnt=0;
if(a==0)
printf("0 (base %lld)\n",b);
else
{
r=0;
m=a;
while(m)
{
r=m%b;
m=m/b;
if(r<0)
{
r+=-b;
m+=(ll)1;
}
ap[cnt++]=dig[r];
}
for(;cnt>0;) printf("%c",ap[--cnt]);
printf(" (base %d)\n",b);
}
}
int main()
{
ll x,y;
while(cin>>x>>y)
{
ten2R(x,y);
}
return 0;
}