原来是我错付了 发表于 2022-10-27 15:06:03

哪里写错了???

#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 15:38:46

本帖最后由 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>

原来是我错付了 发表于 2022-10-27 16:29:14

修改的程序里面第二个for循环怎么理解?
a=10时进入第二个for时,i=1使条件成立,输出的第一个数应该是pow(2,0)啊。
我这样理解哪里错了?

jackz007 发表于 2022-10-28 09:58:39

原来是我错付了 发表于 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]
查看完整版本: 哪里写错了???