解析:和正进制一样,每次取的余数保证在0~m-1之间。(例如m=-16,则余数应该在0~15)就可以直接输出。所以用系统的“%”运算符的时候必须注意检查是不是在该范围(可能在m+1~0),否则就调整。调整的方法是:如果余数<0,那么:余数-=m;商++。
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int a[N];
void slove(){
int n,r,y;
string x="0123456789ABCDEF";
cin>>n>>r;
printf("%d=",n);
stack<int>s;
while(n){
y=n%r;
n/=r;
if(y<0){
y-=r;
n++;
}
s.push(y);
}
while(!s.empty()){
printf("%c",x[s.top()]);
s.pop();
}
printf("(base%d)\n",r);
}
int main(){
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(0);
slove();
return 0;
}