哪里写错了???
#include<stdio.h>#include<math.h>
int main()
{
int a,i;scanf("%d",&a);
if(a%2) printf("-1");
elseif(a%2==0)
{
for(i=19;a=0;i--)
{
if(a>pow(2,i))
{
printf("%lf",pow(2,i));a-=pow(2,i);
}
}
}
return 0;
}
程序为什么输出不了,哪里错了????
本帖最后由 jackz007 于 2022-10-27 16:04 编辑
这是修改的
#include<stdio.h>
#include<math.h>
int main()
{
int a , i ;
scanf("%d" , & a) ;
if(a % 2) printf("-1") ;
else
{
for(; a > 1 ;)
{
for(i = 1 ; a > 1 && pow(2 , i) <= a ; i ++) ;
printf("%3.0f" , pow(2 , i - 1)) ;
a -= pow(2 , i - 1) ;
}
}
}
这是我写的
#include<stdio.h>
int main()
{
int a , b ;
scanf("%d" , & a) ;
if(! (a % 2)) {
for(; a > 1 ;) {
for(b = 1 ; b <= a ; b *= 2) ;
printf("%3d" , b / 2) ;
a -= b / 2 ;
}
printf("\n") ;
} else {
printf("-1\n") ;
}
}
编译、运行实况:
D:\\C>g++ -o x x.c
D:\\C>x
14
842
D:\\C> 修改的程序里面第二个for循环怎么理解?
a=10时进入第二个for时,i=1使条件成立,输出的第一个数应该是pow(2,0)啊。
我这样理解哪里错了?
原来是我错付了 发表于 2022-10-27 16:29
修改的程序里面第二个for循环怎么理解?
a=10时进入第二个for时,i=1使条件成立,输出的第一个数应该是pow ...
a > 1 && pow(2 , i) <= a
这才是使循环继续的条件,要想停止循环,得 a <= 1 或者 pow(2 , i) > a ,是的,没错,我们想要的就是pow(2 , i) > a,因为,我们所要找的是比 a 小能被 2 整除最大的那个数,所以,不能随便终止循环。
页:
[1]