c语言 16进制转十进制问题 我写的16进制转十进制代码如下 转换结果不正确 谁能改一下 不要改主函数

最好是仅仅改动我写的转化公式

s的转换规则是:所有base进制的合法字符和仅能出现在s首位的符号位("+"和"-")转换为一个十进制整数
#include <stdio.h>
#define MAX_STR_LEN 100
int strToInt(char s[], int base)
{
int i,sign=1,n=0;
if(s[0]=='-')sign=-1;
if(s[0]=='+')sign=1;
if(base==16)
{
if(s[0]=='+'||s[0]=='-')
{
for(i=1; s[i]!='\0'; i++)
{
if((s[i]>='0'&&s[i]<='9')||(s[i]>='A'&&s[i]<='F')||(s[i]>='a'&&s[i]<='f'))
n=n*16+s[i]-'0';
else continue;
}
return n*sign;
}
else
{
for(i=0; s[i]!='\0'; i++)
{
if((s[i]>='0'&&s[i]<='9')||(s[i]>='A'&&s[i]<='F')||(s[i]>='a'&&s[i]<='f'))
n=n*16+s[i]-'0';
else continue;
}
return n*sign;
}
}
}
int main()
{
int base;
char s[MAX_STR_LEN];
while( (scanf("%d:", &base) != EOF) && (gets(s) != NULL) )
printf("%d\n", strToInt(s, base));
return 0;
}

0~9,A~F,a~f区别对待

#include <stdio.h>
#define MAX_STR_LEN 100
int strToInt(char s[], int base)
{
int i, sign = 1, n = 0;
if (s[0] == '-')sign = -1;
if (s[0] == '+')sign = 1;
if (base == 16)
{
if (s[0] == '+' || s[0] == '-')
{
for (i = 1; s[i] != '\0'; i++)
{
if ((s[i] >= '0'&&s[i] <= '9'))
n = n * 16 + s[i] - '0';
else if ((s[i] >= 'A'&&s[i] <= 'F'))
n = n * 16 + s[i] - 'A' + 10;
else if ((s[i] >= 'a'&&s[i] <= 'f'))
n = n * 16 + s[i] - 'a' + 10;
else continue;
}
return n*sign;
}
else
{
for (i = 0; s[i] != '\0'; i++)
{
if ((s[i] >= '0'&&s[i] <= '9'))
n = n * 16 + s[i] - '0';
else if ((s[i] >= 'A'&&s[i] <= 'F'))
n = n * 16 + s[i] - 'A' + 10;
else if ((s[i] >= 'a'&&s[i] <= 'f'))
n = n * 16 + s[i] - 'a' + 10;
else continue;
}
return n*sign;
}
}
}
int main()
{
int base;
char s[MAX_STR_LEN];
while ((scanf("%d:", &base) != EOF) && (gets(s) != NULL))
printf("%d\n", strToInt(s, base));
return 0;
}

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