五颜六色(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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!