输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负。
#include<stdio.h>
#include<iostream>
#include<math.h>
using namespace std;
int main(){
char c, s[100];
int flag=1, p=0;
for(int i = 0; (c=getchar())!='#'; i++)
s[i] = c;
for(int i = 0; s[i] != '\0'; i++){
if(s[i]=='-'){
flag=-1;
}
else if((s[i]>='0'&&s[i]<='9')||(s[i]>='A'&&s[i]<='F')||(s[i]>='a'&&s[i]<='f'))
s[p++] = s[i];
}
s[p]='\0';
int dnum=0;
cout << "十六进制:" ;
for(int i =0; s[i] != '\0'; i++){
cout<<s[i];
if((s[i]>='0'&&s[i]<='9'))
dnum += (s[i]-'0') * pow(16, p-i-1);
else if(s[i]>='A'&&s[i]<='F')
dnum += (s[i]-'A'+10) * pow(16, p-i-1);
else if(s[i]>='a'&&s[i]<='f')
dnum += (s[i]-'a'+10) * pow(16, p-i-1);
}
cout << endl << "十进制:" << flag * dnum << endl;
return 0;
}
运行截图: