c语言 将一个十进制整数m转化成r进制整数的字符串表示形式。最好难的地方说明下。谢谢~

2025-12-05 05:05:02
推荐回答(4个)
回答1:

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;
}

回答2:

对r求余,得相应位上的数,再去数组里找到相应的r进制整数的字符。
然后十进制除以r。

注意,最早出来的是r进制整数的最高位

回答3:

对r求余,得相应位上的数,再去数组里找到相应的r进制整数的字符。
然后十进制除以r。

回答4:

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;
}