主题:[讨论]4-10进制转换问题求助
tedwugood
[专家分:0] 发布于 2010-10-07 11:37:00
我写的一个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个回复)
沙发
haierok2003 [专家分:460] 发布于 2010-10-07 14:45:00
首先想问下你是在哪个编译器下,你的代码逻辑还是正确的,在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);
}
板凳
haierok2003 [专家分:460] 发布于 2010-10-07 14:49:00
本人写了个,比较简练,可参考
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 楼
tedwugood [专家分:0] 发布于 2010-10-07 23:12:00
我用的是codeblocks 运行出错 今天用netbeans发现运行正确 不知道怎么回事
4 楼
tedwugood [专家分:0] 发布于 2010-10-07 23:19:00
我去 真简练 大哥你是怎么想到的~~ 我按你的循环一步步做才能看懂。。。什么时候才能练到这个水平啊。。
5 楼
haierok2003 [专家分:460] 发布于 2010-10-08 09:16:00
多写代码吧,代码写多了就会了
小弟还是学生吧
6 楼
tedwugood [专家分:0] 发布于 2010-10-09 10:14:00
对啊 学了一个多月了 连循环都没掌握 悲剧啊
7 楼
cgl_lgs [专家分:21040] 发布于 2010-10-09 10:52:00
才一個月而已,慢慢來。啥事兒都不能整速成,速成只是淺淺的了解而已。每一門程序設計語言都有它的精深之處:)
我来回复