数组-08. 字符串转换成十进制整数(15)
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
张彤彧(浙江大学)
输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果过滤后字符串的首字符为“-”,代表该数是负数。
输入格式:
输入在一行中给出一个以#结束的非空字符串。
输出格式:
在一行中输出转换后的十进制数。题目保证输出在长整型范围内。
输入样例:+P-xf4+-1!#输出样例:
-3905
注意两种情况,一种是结果为0时不能输出-0;另一种就是,如果负号存在中间,那就不考虑,比如ff-dd,结果为65501
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
int a[80]={0};
char c[80];
gets(c);
int m,i,j;
int n=1;
m=strlen(c);
j=0;
for(i=0;i<m;i++)
{
if(c[i]>='0'&&c[i]<='9')
{
a[j]=c[i]-48;
j++;
}
if((c[i]>='a'&&c[i]<='f')||(c[i]>='A'&&c[i]<='F'))
{
if(c[i]=='a'||c[i]=='A')
a[j]=10;
else if(c[i]=='b'||c[i]=='B')
a[j]=11;
else if(c[i]=='c'||c[i]=='C')
a[j]=12;
else if(c[i]=='d'||c[i]=='D')
a[j]=13;
else if(c[i]=='e'||c[i]=='E')
a[j]=14;
else
a[j]=15;
j++;
}
if(c[i]=='-'&&j==0)
n=0;
}
int k;
long int sum;
sum=k=0;
for(i=j-1;i>=0;i--)
{
sum=sum+a[i]*(long int)pow(16,k);
k++;
}
if(sum==0)
printf("0\n");
else
{
if(n==0)
printf("-%ld\n",sum);
else
printf("%ld\n",sum);
}
return 0;
}