思路:
本题一开始我以为是n直接除以2就行了,但是却Wa了。后来明白了。原来是不断用上一个数的倍数叠加的。
描述
给你一个非零整数,让你求这个数的n次方,每次相乘的结果可以在后面使用,求至少需要多少次乘。如24:2*2=22(第一次乘),22*22=24(第二次乘),所以最少共2次;
- 输入
- 第一行m表示有m(1<=m<=100)组测试数据;
每一组测试数据有一整数n(0<n<=10000); 输出 - 输出每组测试数据所需次数s; 样例输入
-
3
-
2
-
3
-
4
样例输出 -
1
-
2
-
2
-
#include<iostream> using namespace std; int main() { int n,m,sum; cin >> n; while (n--) { sum=0; cin >> m; while (m!=1) { if (m%2) { m--; } else { m=m/2; } sum++; } cout << sum << endl; } return 0; }
标程: -
#include<iostream> #include<cmath> using namespace std; int main() { int n,m,cnt; cin>>n; while(n--) { cin>>m; cnt=0; while(m) { if(m&1) cnt++; cnt++; m>>=1; } cout<<cnt-2<<endl; } }