题目来自51nod, 原文链接
题目分析
输入:正整数n
输出:2的k次幂
根据题目,我们只需要从0次开始,循环每次K+1,直到2的k次幂大于正整数n跳出循环。
解法1
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int fun(int n) {
int k = 0, index = 0, sum = 0;
while (n > sum) {
sum = pow(2, index);
if (n%sum == 0) {
k = index;
}
index++;
}
return k;
}
int main() {
int n;
scanf("%d", &n);
printf("%d", fun(n));
system("pause");
return 0;
}
解法2
以上是我做题的思路,提交完代码后发现还有另外的写法,代码更简洁,贴在这里学习一下。
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main() {
int n, k = 0;
scanf("%d", &n);
while (n % 2 == 0) {
n = n / 2;
k++;
}
printf("%d", k);
system("pause");
return 0;
}