i-x-1都应该改成x-i-1。楼主的意思就是乘以16的对应的位数次方呗,你仔细看看就知道应该是x-i-1
2、我们假设十位上是的数字是1,那么这个数代表了16,这时候用一个字符是无法表示的
也就是说,不能简单的用s[i]去存放原16进制的某位转换成10进制对应的数
一个简单的修改方法是,让func函数返回一个int型的数值,这个返回值就是对应的十进制数
具体代码见下
#include
#include
#include
int func(char s[],int x);
void main()
{
char a[20];
int n;
int num;
printf("请输入一串十六进制数:");
scanf("%s",a);
n=strlen(a);
num=func(a,n);
printf("%s=%d",a,num);
}
int func(char s[],int x)
{
int i;
int num=0;
for(i=x-1;i>=0;i--)
{
if(s[i]>='0'&&s[i]<='9')
{
num+=(int)((s[i]-'0')*pow(16,x-i-1));
}
if(s[i]>='a'&&s[i]<='f'){
num+=(int)((s[i]-'a'+10)*pow(16,x-i-1));
}
if(s[i]>='A'&&s[i]<='F'){
num+=(int)((s[i]-'A'+10)*pow(16,x-i-1));
}
}
return num;
}
对r求余,得相应位上的数,再去数组里找到相应的r进制整数的字符。
然后十进制除以r。
注意,最早出来的是r进制整数的最高位
对r求余,得相应位上的数,再去数组里找到相应的r进制整数的字符。
然后十进制除以r。
int main(void)
{
int x, i = 0, j, flag = 0;
char arr[100];
printf("input the number:");
scanf("%d", &x);
if (x < 0)
{
x = -x;
flag = 1;
}
while (x > 0)
{
arr[i] = x % 8 + '0';
x = x / 8;
i++;
}
if (flag == 1)
{
printf("-");
}
for (j = i - 1; j >= 0; j--)
{
printf("%c", arr[j]);
}
return 1;
}