自己写的十六进制转十进制代码,它不适用于类似123ABC这种数字和英文一起的,但是像F,39这种却可以运行,我在下面的代码中有区分它们,这是为什么呢?
#include<stdio.h>
#include<string.h>
int main()
{
int t,len,i,base;
int ans;
char s[33];
scanf("%d",&t);
scanf("%s",s);
len=strlen(s);
ans=0;
base=1;
for(i=len-1;i>=0;i--)
{
if(s[i]=='A'||s[i]=='B'||s[i]=='C'||s[i]=='D'||s[i]=='E'||s[i]=='F')
{ ans=ans+(s[i]-'7')*base;}
else{ans=ans+(s[i]-'0')*base;}
base*=16;
}
printf("%d",ans);
return 0;
}
输入的时候你可以都按照%s去读入,然后处理的时候将0到9的字符``-'0'获得原始数字,不需要在输入时做区分
具体的,不要用scanf(%d),直接用%s读入即可有帮助望采纳~
你要区分什么啊
代码没有什么问题, 只是 scanf("%d", &t); 和t变量没有用,可以去掉
输入123ABC这种数字和英文直接用 scanf("%s", s);读取整个字符串"123ABC"即可, 不需要t变量
你题目的解答代码如下:
#include <stdio.h>
#include <string.h>
int main()
{
int len, i, base;
int ans;
char s[33];
// scanf("%d", &t); 这行没有用
scanf("%s", s);
len = strlen(s);
ans = 0;
base = 1;
for (i = len - 1; i >= 0; i--)
{
if (s[i] == 'A' || s[i] == 'B' || s[i] == 'C' || s[i] == 'D' || s[i] == 'E' || s[i] == 'F')
{
ans = ans + (s[i] - '7') * base;
}
else
{
ans = ans + (s[i] - '0') * base;
}
base *= 16;
}
printf("%d", ans);
return 0;
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
你把第九行去掉就好了