十六进制字符 | 包括0~9 和 a~f(在本道题中规定不分大小写) |
---|
解题思路
- 循环输入一字符串,当出现‘#’时退出输入。
- 设置两个标志位,分别记录第一个负号出现的位置和第一个十六进制出现的位置。(如果第一个十六进制字符之前出现大于一个“-”,同样按照一个处理,当作负数)
- 比较两个位置的大小,判断结果是否为负数。
- 输出结果
#include<stdio.h>
#define N 1000
int main()
{
char ch;
int len1=0,len2=0;
char str1[N];
char str2[N];
int str3[N];
int index1,index2;
int cnt1=0;
int temp=1;
int sum=0;
ch=getchar();
for(int i=0;ch!='\n';i++){
str1[i]=ch;
len1++;
ch=getchar();
}
for(int j=0;j<len1;j++){
if(str1[j]=='-'){
index1=j;
break;
}
}
for(int k=0;k<len1;k++){
if((str1[k]>='0'&&str1[k]<='9')||(str1[k]>='a'&&str1[k]<='f')||(str1[k]>='A'&&str1[k]<='F')){
index2=k;
break;
}
}
for(int k=0;k<len1;k++){
if((str1[k]>='0'&&str1[k]<='9')||(str1[k]>='a'&&str1[k]<='f')||(str1[k]>='A'&&str1[k]<='F')){
str2[cnt1++]=str1[k];
}
}
for(int i=0;i<cnt1;i++){
if(str2[i]>='0'&&str2[i]<='9'){
str3[i]=str2[i]-'0';
}
else if(str2[i]>='a'&&str2[i]<='f'){
str3[i]=str2[i]-'a'+10;
}
else if(str2[i]>='A'&&str2[i]<='F'){
str3[i]=str2[i]-'A'+10;
}
}
for(int j=cnt1-1;j>=0;j--){
sum+=temp*str3[j];
temp*=16;
}
if(index1<index2){
printf("-%d\n",sum);
}
else if(index1>index2){
printf("%d\n",sum);
}
return 0;
}