c语言代码求助

题目描述:输入一个以回车符结束的字符串(少于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位,就有可能产生溢出,结果就不正确了;要正确就得用“大数处理”措施,比较麻烦。以上代码不是套数处理的。

温馨提示:答案为网友推荐,仅供参考
相似回答