【发布时间】:2012-10-27 13:21:50
【问题描述】:
这个程序是将基数为 4 的数转换为基数为 2 的数,它应该就地完成
#include<stdio.h>
#include<string.h>
void shiftr(char num[],int i)
{
memmove(num+i,num+i+1,strlen(num)-i);
}
char* convert4to2(char num[])
{
int i=0,len;
char ch;
while(num[i]!='\0')
{
ch=num[i];
shiftr(num,i);
switch(ch)
{
case '0':num[i++]='0';
num[i++]='0';
break;
case '1':num[i++]='0';
num[i++]='1';
break;
case '2':num[i++]='1';
num[i++]='0';
break;
case '3':num[i++]='1';
num[i++]='1';
break;
default:printf("Error");
}
}
num[i]='\0';
return(num);
}
void main()
{
char num[20];
printf("Enter the Base 4 Number:");
scanf("%s",&num);
printf("The Binary Equivalent is:%s\n",convert4to2(num));
}
输入 121(以 4 为基数)的输出应该是 011001,但它只显示 01。 对于像 12101 这样的较大数字,它会显示 0100,取第一个和最后一个数字。 可能是什么问题呢?
【问题讨论】:
-
这个
shiftr()功能首先很痛苦。 -
@H2CO3 但必须到位
-
从字符串末尾转换(首先确保数组有空间)。
-
我认为你弄错了
void *memmove(void *dest, const void *src, size_t n);的参数顺序。你是在左移,而不是右移。