AC的代码,但是x=x+r看不懂,我自己推算的是-k进制中,如果出现了-x,那么可以在前一位+1,在本位+k; 理由:设该位的单位为-t,则高一位的单位为-k ∗ t,那么就有 -k ∗ t+k ∗ t-x ∗ t=-x ∗ t,则可证明,该结论无误,但是这样似乎就没必要加入x=x+r这个步骤了,但是不加就是错的,求大佬们指教。
#include<bits/stdc++.h>
using namespace std;
int n,r,num;
int a[50];
bool b[50];
void zh(int x,int y){
if(x==0){
num--;
return;
}
else{
a[num]=x%y;
if(a[num]<0){
a[num+1]++;
a[num]=a[num]-r;
x=x+r;//这行代码看不懂,但是没有这行就是错的,有了这行就对了
}
num++;
int xp;
xp=x/y;
zh(xp,y);
}
}
int main(){
cin>>n>>r;
num=1;
zh(n,r);
cout<<n<<"=";
for(int i=num;i>0;i--){
if(a[i]<10)cout<<a[i];
else{
switch(a[i]){
case 10:cout<<"A";break;
case 11:cout<<"B";break;
case 12:cout<<"C";break;
case 13:cout<<"D";break;
case 14:cout<<"E";break;
case 15:cout<<"F";break;
case 16:cout<<"G";break;
case 17:cout<<"H";break;
case 18:cout<<"I";break;
case 19:cout<<"J";break;
}
}
}
cout<<"(base"<<r<<")"<<endl;
return 0;
}