请问我这个十进制转化二进制程序哪里有问题?

#include
int main ()
{
int n,x,d,m=0;
scanf("%d",&n);
while(n--)
{
scanf("%d",&x);
if(x>0&&x<=10000)
m=0;
d=x;
do
{
m=m*10+x%2;
x=x/2;
}while(x!=0);
if(d%2!=0)
printf("%d\n",m);
if(d%2==0)
printf("%d\n",m*10);
}
return 0;
}
它编译无问题,就是运行时输入2,12等数时出现问题,5,10却没问题

2个回答

#include <stdio.h>
#include <math.h>
int main()
{
    int n, x, d, m = 0;
    scanf_s("%d", &n);
    while (n--)
    {
        scanf_s("%d", &x);
        if (x>0 && x <= 10000)
            m = 0;
        d = x;
        for (int i = 0; x != 0; i++, x = x / 2){
            m = (x % 2) * pow((double)10, i - 1) + m;
        }

        if (d % 2 != 0)
        {
            if (d == 1)
                printf("%d\n", d);
            else
            printf("%d\n", m);
        }   
        if (d % 2 == 0)
            printf("%d\n", m * 10);
    }
    return 0;
}
BostonRayAlen
bostonAlen 回复alwaysmissme: 什么错误,这句话没问题,编译不过可能是符号逗号或括号问题
4 个月之前 回复
alwaysmissme
余五阳 for (i = 0; x!= 0;i++, x = x/2)这条语句我理解了意思,但编译时出现了错误,请问是为什么?
4 个月之前 回复
alwaysmissme
余五阳 回复MilitarySimulation: 太感谢您了,我会认真思考的。
4 个月之前 回复
BostonRayAlen
bostonAlen 回复alwaysmissme: 你原来的程序有很多计算出来不对,对比这个你再想想你的思路
4 个月之前 回复
BostonRayAlen
bostonAlen 楼下我也运行了,也不准确数字为1时就不对了,我改了下他的程序,你可以试试
4 个月之前 回复
BostonRayAlen
bostonAlen 回复alwaysmissme: 哦,还是有问题,我没仔细看,我擦
4 个月之前 回复
alwaysmissme
余五阳 谢谢您
4 个月之前 回复
#include <stdio.h>
#include <math.h>
int main ()
{
    int n,x,d,m=0;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%d",&x);
        if(x>0&&x<=10000)
            m=0;
        d=x;
        for(int i = 0;x != 0; i++,x = x/2 ){
            m = (x%2) * pow((double)10, i - 1) + m;
        }

        if(d%2!=0)
            printf("%d\n",m);
        if(d%2==0)
            printf("%d\n",m*10);
    }
    return 0;
}
alwaysmissme
余五阳 谢谢您
4 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问