输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。
输入格式:
输入在一行中给出一个以#结束的非空字符串。
输出格式:
在一行中输出转换后的十进制数。题目保证输出在长整型范围内。
输入样例:
+-P-xf4+-1!#
结尾无空行
输出样例:
-3905
结尾无空行
#include<stdio.h>
#include<math.h>
main(){
char sign,c;
char s[10];
int i=0,flag=0,count=0;
long sum=0;
while((c=getchar())!='#'){
//第一个数没找到
if(flag==0){
if(c=='+'||c=='-'){
sign=c;
}
}
//符合条件存另一个数组
if((c>='0'&&c<='9')||(c>='a'&&c<='f')||(c>='A'&&c<='F')){
s[i]=c;
flag=1;
//第一个数找到了
count++;
//统计新数组长度
i++;
}
}
for(i=count;i>=0;i--){
if(s[i]>='0'&&s[i]<='9'){
sum+=(s[i]-'0')*pow(16,(count-i-1));
}
if(s[i]>='a'&&s[i]<='f'){
sum+=(s[i]-'a'+10)*pow(16,(count-i-1));
}
if(s[i]>='A'&&s[i]<='F'){
sum+=(s[i]-'A'+10)*pow(16,(count-i-1));
}
}
if(sign=='-'){
flag=-1;
}else{
flag=1;
}
printf("%ld",flag*sum);
}