zoukankan      html  css  js  c++  java
  • nyoj 46 最少乘法次数

    View Code
     1  
     2 #include <iostream>
     3 #include <cstdio>
     4 using namespace std;
     5 
     6 int main()
     7 {
     8      int T;
     9      scanf("%d",&T);
    10      while(T--)
    11      {
    12          int n;
    13          scanf("%d",&n);
    14          int t=n,sum=-1,k=0;
    15          while(t)
    16          {
    17              sum++;
    18              if(t%2) k++;
    19              t=t>>1;
    20          }
    21          cout<<sum+k-1<<endl;
    22      }
    23     return 0;
    24 }
    25         

     

    最少乘法次数

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

    给你一个非零整数,让你求这个数的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
    上传者
    李剑锋
    这个题目讲究技巧 log2(n)+n的二进制中出现1的个数减1
    技巧需要自己理解和领悟
     
  • 相关阅读:
    天心阁漫步
    大美湘江
    easyui tree基本操作
    盗墓笔记
    半年了
    文件上传控件值发生变化后自动提交表单
    宁静的夏夜
    今天您给别人让座,将来别人给您让座
    优先队列priority_queue 用法详解
    POJ2387
  • 原文地址:https://www.cnblogs.com/wujianwei/p/2636975.html
Copyright © 2011-2022 走看看