输入一个十六进制数字(事实上是三个十六进制的数字),转换成三个十进制数字,这个十六进制数字是两位两位分开计算的
输入三个十进制数字,转换成三个十六进制的数字,一行连在一起输出
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;
}
比如说我在本地运行不了,应该是因为我无法结束输入,还有如果不加 !=EOF,代码会超时,二维字符数组可以用%s逐行输入,可以用strlen函数对二维字符数组逐行计算长度,%02x表示宽度为2的十六进制输出,不足2的用0补足,'a’的ASCII码是97,十六进制里面的a是10,所以代码里面减去了87
所以cnt=1表示的是十六进制转十进制,从第二位开始处理,因为第一位#是无效的
不再赘述
到这里结束,就把60题的简单和中等题都做了一遍了,还是那句话,希望程设能过