回 帖 发 新 帖 刷新版面

主题:[讨论]4-10进制转换问题求助

我写的一个4进制转为10进制的程序 运行后11=5  1001=65这都没问题 但是121=26 10001=258 100000001=65538   多了1  百思不得其解啊 我知道指针能简便点做这个问题 但是我更想知道这个程序哪里出错了 求大神。。。

#include<stdio.h>
#include<math.h>
int main(void)
{
    int A,x,n,ans,i=0,sum=0,dif=0;
    scanf("%d",&A);
    for(n=0;A/pow(10,n)!=0;n++){i=n;};//计算4进制数有几位
    while(i>=0)
    {x=pow(10,i);
        ans=A/x*pow(4,i);//将每位转成10进制数
     sum=sum+ans;
     dif=A%x;
     A=dif;
     i--;
     };

    return(sum);

求大神 告诉我哪错了把 谢谢~~

回复列表 (共7个回复)

沙发

首先想问下你是在哪个编译器下,你的代码逻辑还是正确的,在VC下做如下修改即可得到正确结果
int main(void)
{
    int A,x,n,ans,i=0,sum=0,dif=0;
    scanf("%d",&A);
    for(n=0;(int)(A/pow(10,n))!=0;n++)    //类型强制转换,pow返回double类型
    {
      i=n;
    }//;//计算4进制数有几位   分号多余
    while(i>=0)
    {
        x=pow(10,i);
        ans=A/x*pow(4,i);//将每位转成10进制数
        sum=sum+ans;
        dif=A%x;
        A=dif;
        i--;
     }   //;   分号多余

    return(sum);
}

板凳

本人写了个,比较简练,可参考
int main(void)
{
    int num,sum=0,i=0;
    scanf("%d",&num);
    while(num)
    {
        sum+=num%10*pow(4,i);
        num/=10;
        i++;
    }
    return sum;
}

3 楼


我用的是codeblocks 运行出错  今天用netbeans发现运行正确 不知道怎么回事

4 楼


我去 真简练 大哥你是怎么想到的~~ 我按你的循环一步步做才能看懂。。。什么时候才能练到这个水平啊。。

5 楼

多写代码吧,代码写多了就会了
小弟还是学生吧

6 楼


对啊 学了一个多月了 连循环都没掌握 悲剧啊

7 楼

才一個月而已,慢慢來。啥事兒都不能整速成,速成只是淺淺的了解而已。每一門程序設計語言都有它的精深之處:)

我来回复

您尚未登录,请登录后再回复。点此登录或注册