有点迷糊
查看原帖
有点迷糊
186945
书本楼主2025/7/3 15:19

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;
}
2025/7/3 15:19
加载中...