题目描述:输入一个以回车符结束的字符串(少于80个字符),过滤去所有的非十进制字符后(不区分大小写),组成一个新字符串(十六进制形式),然后将其转换为十进制数后输出。
输入:多组测试数据,每组输入一个以回车结束的字符串(少于80个字符)。
输出:转换后的十进制数
样例输入 :
ABXYZ12
EF8GH4I
样例输出 :
43794
61316
代码文本:
#include "stdio.h"
int main(int argc,char *argv[]){
char a[80];
int i,j,k;
while(1){
printf("Please enter a string(Length<80)...\n");
if((a[0]=getchar())==EOF)
break;
for(i=1;i<80;i++)
if((a[i]=getchar())=='\n')
a[i]='\0',i=79;
for(i=j=0;a[i];i++)
if((a[j]=a[i])>='0' && a[j]<='9' || (k=a[j]|32)>='a' && k<='f')
j++;
a[j]='\0';
for(k=i=0;a[i];i++)
if(a[i]>='0' && a[i]<='9')
(k*=16)+=a[i]-'0';
else
(k*=16)+=(a[i]|32)-'a'+10;
printf("%d\n",k);
}
return 0;
}
此题表述上有漏洞,如果处理后的16进制字符串长于8位,就有可能产生溢出,结果就不正确了;要正确就得用“大数处理”措施,比较麻烦。以上代码不是套数处理的。