题目:给一个正整数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!