c语言,将十进制转化为二进制

#include <stdio.h>
#include <math.h>
int main(void)
{
int ri,looptimes;
int i,n;
int dectobin(int n);

scanf("%d",&looptimes);
for(ri=1;ri<=looptimes;ri++){
scanf("%d",&n);
i=dectobin(n);
printf("%d\n",i);
}
}
int dectobin(int n){
int i;
int num;
num=0;
for(i=n;i>=0;i--){
if(n/pow(2,i)==1){
num=num+pow(10,i);
n=n-pow(2,i);
if(n==0)
break;
}
}
return num;
}
然后我发现不管我具体输什么数字进去,都是输出0,请教一下我哪里弄错了,谢谢啊

十进制转二进制可以使用库函数itoa。

itoa函数原型:char*itoa(int value,char*string,int radix);

功能:将任意类型的数字转换为字符串。在<stdlib.h>中与之有相反功能的函数是atoi。

nt value 被转换的整数,char *string 转换后储存的字符数组,int radix 转换进制数,如2,8,10,16 进制等。

参考代码:

#include <stdio.h>
#include<stdlib.h>
int main()

int i=10;
char a[100];
itoa(i,a,2);
printf("%s\n",a);
return 0; 
}
/*
1010
*/
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-26
换一种思路,会更简单些,给点时间,我写一个给你。
#include <stdio.h>

void dectobin(int n, char *po)
{
char chtmp[33]; //32 整数,使用33字节存储
int i, cnt = 0;
while (n != 0)
{
chtmp[cnt] = n % 2 + '0';
n /= 2;
cnt++; //累计位数
}
//以上字符方向是反的,现调整过来
for (i = 0; i < cnt; i++)
po[i] = chtmp[cnt - 1 - i];
po[i] = 0; //字符串结尾的 0
}
void dectobin2(int n, char *po)
{
int i, j;
unsigned int k = 0x80000000; //构造一个第 31 位是 1,其他位全为 0 的数
for (i = 0; i < 32; i++)
{
j = n & k; //取出 n 的第 31 - i 位数
if (j == 0)
po[i] = 0;
else
po[i] = 1;
k >>= 1;
}
//如果有必要,除去二进制数前面的 0
/*
for (j = 0; j < 32; j++)
{
if (po[j] == 1) break;
}
for (i = j; i < 32; i++)
{
po[i - j] = po[i];
}
po[i - j] = 0; //字符串结尾的 0
*/
}

int main()
{
int i, n = 159753; //为方便测试
//scanf("%d", &n);
char ch[33];
dectobin(n, ch);
printf("%s\n", ch);
dectobin2(n, ch);
for (i = 0; i < 32; i++)
{
printf("%d", ch[i]);
}
printf("\n");
system("pause");
return 0;
}追问

好的我等着

追答

OK。两种方法,各有优劣,视情况使用。

本回答被提问者采纳
第2个回答  2014-12-26
感觉你这个好像不对,而且pow函数的返回值是double类型的,所以if(n/pow(2,i)==1)这个条件永远满足不了,用int存储最后的结果也不好,因为结果很容易溢出,pow的结果也容易溢出,下面是我写的一个,参考下吧,希望对你有帮助

int dectobin(int n,char* des){
int i=0;
int num,tmpn = n;
num=0;
do
{
for (int j = i; j > 0; j--)
{
des[j] = des[j-1];
}
des[0] = tmpn%2+'0';
i++;
tmpn /= 2;
} while (tmpn);

return num;
}

int _tmain(int argc, _TCHAR* argv[])
{
int i,n;
char tmp[1024] = {0};
printf("请输入十进制数:");
scanf("%d",&n);

i=dectobin(n,tmp);
printf("%s\n",tmp);

return 0;
}
第3个回答  2014-12-26
int dectobin(int n){
int i;
int num;
num=0;
if(n>1023||n<1) return 0;//safe done
for(i=10;i>=0;i--){ //10 is max limit
if(n/(int)pow(2,i)==1){
num=num+(int)pow(10,i);
n=n-(int)pow(2,i);
if(n==0)
break;
}
}
return num;
}

你这个程序逻辑,最多只能支持到1023,因为你用int表达二进制,最多只能表示10个1。

第4个回答  2020-11-19

C语言_010_二进制转十进制_上

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网