2048除法练习

题目:给一个正整数n,计算它最多能被2的多少次幂整除
这道题打眼一看就知道很简单,运用循环就可以解决问题,于是我便编了如下的代码
请注意,紧接下来写的代码是错误的

#include<stdio.h>
int jiecheng(int m){
    int i,n=0;
    for(i=0;i<=m/2;i++){
        if(m%2==0){
            m=m/2;
            n++;
        }
    }
    return n;
}
main(){
    int m,o;
    scanf("%d",&m);
    o=jiecheng(m);
    printf("%d",o);
}

当时写完只测试了一个值,发现答案是正确的,于是提交了,网站提示代码错误,检查了好几遍,还以为是自己输出的有问题,最后才发现,是自己循环条件是错误的for语句里面的循环条件是i<=m,而下面的if语句中,自己把m=m/2给m重新复制,看似没有问题,但当输入的数值过大的时候,i的值会大于m的值,但是m可能还是偶数,所以此循环是错误的,想了一下,这里用for语句循环不如while语句循环方便,自己也是因为看了别人的代码,才意识到自己的错误。
以下是别人的正确的代码

#include <stdio.h>
int main(){
    int n;
    scanf("%d",&n); 
    int t=0;
    while(n%2==0){
        n=n/2;
        t++;
    }
    printf("%d\n",t);
    return 0;
}

怎么说,代码简单,明了。
还是自己练的太少。fighting!

猜你喜欢

转载自blog.csdn.net/qq_43598865/article/details/88703334