我原先的代码是这样的:
#include<stdio.h>
#define MAXLINE 1000
#include<math.h>
#include<ctype.h>
int htoi(char s[])
{
int i=2,j,c,n;
for(j=0;s[j]!='\n'&&s[j]!='\0';j++)
;
for(i=2;i<=j;i++)
{
c=s[i];
switch(c)
{case 'a':case 'A':
n=n+10*pow(16,j-i-1);
break;
case 'b':case 'B':
n=n+11*pow(16,j-i-1);
break;
case 'c':case 'C':
n=n+12*pow(16,j-i-1);
break;
case 'd':case 'D':
n=n+13*pow(16,j-i-1);
break;
case 'e':case 'E':
n=n+14*pow(16,j-i-1);
break;
case 'f':case 'F':
n=n+15*pow(16,j-i-1);
break;
default:
n=n+c*pow(16,j-i-1);
}
}
return n;
}
main()
{
int c=0, i=0;
long j=0;
char s[MAXLINE];
for(i=0;i<=MAXLINE;i++)
s[i]=0;
i=0;
for(i=0;(c=getchar())!='\0'&&c!='\n';i++)
s[i]=c;
printf("%ld", j=htoi(s));
}
这貌似正确,但会输出很神奇的答案,如:输入 ox1,输出 49...
将switch 里的 default部分换成:
case '1':
n=n+1*pow(16,j-i-1);
break;
case '2':
n=n+2*pow(16,j-i-1);
break;
case '3':
n=n+3*pow(16,j-i-1);
break;
case '4':
n=n+4*pow(16,j-i-1);
break;
case '5':
n=n+5*pow(16,j-i-1);
break;
case '6':
n=n+6*pow(16,j-i-1);
break;
case '7':
n=n+7*pow(16,j-i-1);
break;
case '8':
n=n+8*pow(16,j-i-1);
break;
case '9':
n=n+9*pow(16,j-i-1);
break;
case '0':
n=n;
break;
后则可以完美输出。不是很明白为什么。
向各位大神,助教老师求教
#include<stdio.h>
#define MAXLINE 1000
#include<math.h>
#include<ctype.h>
int htoi(char s[])
{
int i=2,j,c,n;
for(j=0;s[j]!='\n'&&s[j]!='\0';j++)
;
for(i=2;i<=j;i++)
{
c=s[i];
switch(c)
{case 'a':case 'A':
n=n+10*pow(16,j-i-1);
break;
case 'b':case 'B':
n=n+11*pow(16,j-i-1);
break;
case 'c':case 'C':
n=n+12*pow(16,j-i-1);
break;
case 'd':case 'D':
n=n+13*pow(16,j-i-1);
break;
case 'e':case 'E':
n=n+14*pow(16,j-i-1);
break;
case 'f':case 'F':
n=n+15*pow(16,j-i-1);
break;
default:
n=n+c*pow(16,j-i-1);
}
}
return n;
}
main()
{
int c=0, i=0;
long j=0;
char s[MAXLINE];
for(i=0;i<=MAXLINE;i++)
s[i]=0;
i=0;
for(i=0;(c=getchar())!='\0'&&c!='\n';i++)
s[i]=c;
printf("%ld", j=htoi(s));
}
这貌似正确,但会输出很神奇的答案,如:输入 ox1,输出 49...
将switch 里的 default部分换成:
case '1':
n=n+1*pow(16,j-i-1);
break;
case '2':
n=n+2*pow(16,j-i-1);
break;
case '3':
n=n+3*pow(16,j-i-1);
break;
case '4':
n=n+4*pow(16,j-i-1);
break;
case '5':
n=n+5*pow(16,j-i-1);
break;
case '6':
n=n+6*pow(16,j-i-1);
break;
case '7':
n=n+7*pow(16,j-i-1);
break;
case '8':
n=n+8*pow(16,j-i-1);
break;
case '9':
n=n+9*pow(16,j-i-1);
break;
case '0':
n=n;
break;
后则可以完美输出。不是很明白为什么。
向各位大神,助教老师求教