社区讨论

75求助,点2WA,代码清晰易懂

B2143进制转换参与者 3已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@m06vi14m
此快照首次捕获于
2024/08/23 23:35
2 年前
此快照最后确认于
2025/11/04 22:36
4 个月前
查看原帖
看了题解知道这题是用短除法了,但是为什么我代码点2WA了哇
CPP
#include<bits/stdc++.h>
using namespace std;

#define int long long

int mi[50];//每位代表的数预处理
int x,m;
char pt[7]={0,'A','B','C','D','F','E'};
int ans[50];
int hi;//最高位

int po(int i){
	return mi[i];
}

void print(){
	for(int i=hi;i>=1;i--){
		if(ans[i]<=10)
			cout<<ans[i];
		else
			cout<<pt[ans[i]%10];
	}
	cout<<"\n";
}

void f(int i){//位数
	//cout<<i<<" "<<x<<"\n";
	
	if(x>po(i)*(m-1))
		f(i+1);
	else{
		hi=i;
	}

	int n=x/po(i);
	ans[i]=n;
	x-=po(i)*n;
	
	//cout<<i<<" "<<n<<" "<<x<<"\n";
}

signed main(){
	cin>>x>>m;
	memset(ans,-1,sizeof(ans));
	int s=1;
	for(int i=1;s<=pow(10,9);i++){
		mi[i]=s;
		s*=m;
		//cout<<mi[i]<<" ";
	}
	
	f(1);
	
	print();
}

回复

6 条回复,欢迎继续交流。

正在加载回复...