五颜六色(0010)

2023-12-22 22:35:16

题意

输入一个十六进制数字(事实上是三个十六进制的数字),转换成三个十进制数字,这个十六进制数字是两位两位分开计算的
输入三个十进制数字,转换成三个十六进制的数字,一行连在一起输出

输入

150
50
76

输出

#96324c

输入

#500d01

输出

80,13,1

代码

#include<bits/stdc++.h>

using namespace std;

char f[10][10];

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	int cnt=0;
	while(scanf("%s",f[cnt])!=EOF)
	{
		cnt++;
	}
	
	if(cnt==1)
	{
		for(int i=0,j=1;i<3;i++,j+=2)
		{
			int x=0;
			if(f[0][j]>='a')	x+=(f[0][j]-87)*16;
			else	x+=(f[0][j]-'0')*16;
			if(f[0][j+1]>='a')	x+=f[0][j+1]-87;
			else	x+=f[0][j+1]-'0';
			
			cout<<x;
			if(i!=2)	cout<<",";
		}
	}
	else
	{
		cout<<"#";
		for(int i=0;i<3;i++)
		{
			int res=0;
			int len=strlen(f[i]);
			for(int j=0;j<len;j++)
			{
				res=res*10+f[i][j]-'0';
			}
			printf("%02x",res);
		}
	}
	
	puts("");
	return 0;
}

总结

1.细节非常多

比如说我在本地运行不了,应该是因为我无法结束输入,还有如果不加 !=EOF,代码会超时,二维字符数组可以用%s逐行输入,可以用strlen函数对二维字符数组逐行计算长度,%02x表示宽度为2的十六进制输出,不足2的用0补足,'a’的ASCII码是97,十六进制里面的a是10,所以代码里面减去了87

2.输入十六进制就只有一行

所以cnt=1表示的是十六进制转十进制,从第二位开始处理,因为第一位#是无效的

3.进制转换比较常规

不再赘述
到这里结束,就把60题的简单和中等题都做了一遍了,还是那句话,希望程设能过

文章来源:https://blog.csdn.net/L3102250566/article/details/135160527
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。