nyoj46

来源:互联网 发布:java实现高斯模糊 编辑:程序博客网 时间:2024/06/09 19:19

最少乘法次数

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
描述

给你一个非零整数,让你求这个数的n次方,每次相乘的结果可以在后面使用,求至少需要多少次乘。如24:2*2=22(第一次乘),22*22=24(第二次乘),所以最少共2次;

               

输入
第一行m表示有m(1<=m<=100)组测试数据;
每一组测试数据有一整数n(0<n<=10000);
输出
输出每组测试数据所需次数s;
样例输入
3234
样例输出
122
上传者
李剑锋



题解

3
2^2=2*2;(第一次)
2^3=2^2*2;(第二次)
4
2^2=2*2;(第一次)
2^4=2^2*2^2;(第二次)
5
2^2=2*2;(第一次)
2^4=2^2*2^2;(第二次)
2^5=2^4*2;(第三次)

#include<math.h>#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;int main(){    int t,n,ans;    scanf("%d",&t);    while(t--)    {        ans= 0;        scanf("%d",&n);        while(n!=1)        {            if (n%2==1)                ans=ans+2;            else                ans++;            n/=2;        }        printf("%d\n",ans);    }}


0 0
原创粉丝点击