社区讨论

进制转换求助

学术版参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@mi86fwz2
此快照首次捕获于
2025/11/21 09:24
4 个月前
此快照最后确认于
2025/11/21 09:24
4 个月前
查看原帖
题目描述 Description
李明在做进制转换的问题时,由于粗心,在将一个二进制数转化为三进制数的过程中写错了一位数字。现在给出他转化为三进制的结果,试写出最大的和最小的可能的二进制结果。三进制数的最高位不会是0。
输入描述 Input Description
一个三进制形式下的数字
输出描述 Output Description
输出最大和最小的可能二进制形式下的结果,每行一个
样例输入 Sample Input
222
样例输出 Sample Output
11001 10001
??? 样例正确,提交0分
code
CPP
#include<iostream>
#include<cmath>
using namespace std;
string s3,s2,k;
long long s10;
int temp=1,n;
int main()
{
	ios_base::sync_with_stdio(0);
	cin>>s3;
	k=s3;
	int l3=s3.size();
	// s3_max
	if(k[0]==0)
		while(k[l3-n]==0&&n<13)
		{
			if(k[l3-n-1]==0&&l3-n>=1)
				k[l3-n-1]--;
			else n++;
		}
	else k[0]++;
	for(int i=0;i<l3;i++)
	{
		s10+=(k[i]-'0')*temp;
		temp*=3;
	}
	while(s10)
	{
		s2=char(s10%2+'0')+s2;
		s10>>=1;
	}
	cout<<s2<<endl;
	// s3_min
	k=s3,temp=1,s10=0,s2="";
	l3=k.size();
	if(k[l3-1]==0)
		while(k[n]==0&&n+1<l3)
		{
			if(k[n+1]&&n+1<l3)
				k[n+1]--;
			else
				n++;
		}
	else
		k[l3-1]--;
	for(int i=0;i<l3;i++)
	{
		s10+=(k[i]-'0')*temp;
		temp*=3;
	}
	while(s10)
	{
		s2=char(s10%2+'0')+s2;
		s10>>=1;
	}
	cout<<s2;
	return 0;
}

回复

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

正在加载回复...