把二进制转换十进制,循环的地方交换位置为什么出错?
int main(){
cout<<"请输入8位二进制的数:"<<endl;
char ch;
int i=7,sum=0;
for(;i>=0;i--) {
cin>>ch;
if(ch=='1')
sum += power(2,i);
}
cout<<"转换后的十进制数位:"<<sum<<endl;
return 0;
}
double power(double x,int n){
double r=1.0;
while(n--){
r *=x;
}
return r;
}如果for循环改为这样为什么出错?
for(;i>=0;) {
i--;
cin>>ch;
if(ch=='1')
sum += power(2,i);
} 二进制 power 循环出错 [解决办法]
一进入函数就执行i-- i = 6,5,4,3,2,1,0 只换算了7位
[解决办法]
i每次循环进来就 进行了自减一次了!
// 方法1
for(;i>=0;)
{
cin>>ch;
if(ch=='1')
sum += power(2,i);
i--;
}
//方法2
int i = 8;
for(;i>0;)
{
i--;
cin>>ch;
if(ch=='1')
sum += power(2,i);
}
[解决办法]
你的方法2 像你输入(0000 0011)
他最后一次循环是power(2,-1),while循环当然跳不出
[解决办法]
楼主你没弄明白 for(;i>=0;i--) 是怎么执行的。。。
这条语句,先执行i>=0,然后执行循环体,再执行的是 i--; 在判断i>=0是否为真,然后再执行循环体,再执行的是 i--;
如果是for(;i>=0;) { i--;
执行的顺序就变了,先执行i>=0,然后执行循环体,相对于上一个语句,这个i--是在上个循环体之前执行。
[解决办法]
double power(double x,int n){
double r=1.0;
while(n--){
r *=x;
}
这不是你自己写的吗
难道我眼花?