最少乘法次数扩展

给你一个非零整数,运算规则如下:
经过一次计算后可将得到的次幂任意相乘.
举例如下:
1.假设底数为2,则未计算前2的幂次只有1.(初始化)
2.2 * 2 = 4. 经过一次计算后,2的幂次共有1、2.(这称为第一次运算)
3.经过2*2=4 2*4=8 4*4=16 经过第二次计算后,2的幂次共有1、2、3、4.(这称为第二次运算)
4.以此类推,直到可以算出2的n次方.(这称为第k次运算)

求至少需要多少次这样的运算可以得到这个数的n次方.


代码如下:

#include<iostream> #include<cstdio> using namespace std; int main() { freopen("Input.txt", "r", stdin); int N; scanf("%d", &N); while(N--) { int n, count = 0, sub = 1; scanf("%d", &n); for(int i = 0; ; ++i) { sub *= 2; count++; if(sub >= n) break; } printf("%d\n", count); } return 0; }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值