- 实验06-8:字符串转换成十进制整数
【问题描述】输入一个以'#'结束的字符串,滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数的字符串,然后将其转化为十进制数后输出。如果过滤后字符串的首字符为'-',代表的是负数。
【输入形式】一个字符串
【输出形式】一个十进制整数
【样例输入】+P-xf4+-1!#
【样例输出】-3905
【样例说明】输入的内容,按十六进制数要求将数值(09,AE)和符号(在数值之前的'-')保留,得到-f41,转换为十进制后市-3905
就是我敲的代码,没有办法输出最后的十进制的值
#include<stdio.h>
#include<math.h>
int main()
{
char a[20],b[20]={0};
int n=0,i,j=0,c=0,s=0;
while((a[n]=getchar())!='#')
{
n++;
}
for(i=0;i<n;i++)
{
if((a[i]>='0'&&a[i]<='9')||(a[i]>='a'&&a[i]<='f'))
{
b[j]=a[i];
j++;
if(c!=0)
{
c++;
}
}
if(c==0)
{
if(a[i]=='-')
{
b[j]=a[i];
c++;
j++;
}
}
}
printf("%s",b);
n=j-1;
c=0;
for(i=n;n>0;i--)
{
if(b[i]>='0'&&b[i]<='9')
c=pow(16,n-i)*(b[i]-'0');
if(b[i]>='a'&&b[i]<='e')
c=pow(16,n-i)*(b[i]-'a'+10);
s=s+c;
}
printf("%d",s);
if(a[0]=='-')
{
printf("-%d",s);
}
else
{
if(b[i]>='0'&&b[i]<='9')
c=pow(16,n)*(b[i]-'0');
if(b[i]>='a'&&b[i]<='e')
c=pow(16,n)*(b[i]-'a'+10);
s=s+c;
printf("%d",s);
}
}
希望帮忙看看感激不尽.