NYOJ46 最少乘法次数(二进制思想)
来源:互联网 发布:强制写作软件 编辑:程序博客网 时间:2024/05/21 14:06
最少乘法次数
时间限制: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
题意有点模糊其实,其实是这样的意思
最少乘法次数
时间限制: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
底数全是2 输入的n全是指数
像三组数据 2,3,4 意思就是求2^3,2^4,2^5 需要转化多少次。
举个例子 2^10;
它需要经历四次转化
2*2 = 2^2;
2^2 * 2^2 = 2^4;
2^4 * 2^4 = 2^8;
2^8 * 2^2 = 2^10;
我们将指数10化为二进制1010,这个最高位的1呢 代表的就是2^3 = 8,所以就是转化到8需要三次 然后第三位的1是2^1 = 2, 转化到2需要1一次
所以10 = 8+2; 次数就是3+1 = 4;
所以我们得到了一个式子 次数 = 位数-1+1的个数(除去最高位);
代码实现
#include<stdio.h>#include<string.h>int main() { int m; scanf("%d", &m); while(m--) { int n, i = 0, count = 0, a[200]; scanf("%d", &n); while(n != 0) { a[i] = n%2; n /= 2; i++; } for(int j = 0; j < i-1; j++) { if(a[j] == 1) count++; } printf("%d\n", i+count-1); }}
0 0
- NYOJ46 最少乘法次数(二进制思想)
- NYOJ46最少乘法次数
- NYoj46 最少乘法次数
- nyoj46 最少乘法次数
- NYOJ46最小乘法次数
- 最少乘法次数 (数学 技巧)
- 最少乘法次数
- 最少乘法次数扩展
- 最少乘法次数
- 46 最少乘法次数
- 最少乘法次数
- 最少乘法次数
- NYOJ-最少乘法次数
- 最少乘法次数
- 最少乘法次数
- 最少乘法次数
- 最少乘法次数-数论
- 最少乘法次数
- 无符号数与有符号数比较大小
- Linux下自定义环境变量
- 1004 Let the Balloon Rise
- 动态内存分配
- Educational Codeforces Round 19 A+B+C+E!
- NYOJ46 最少乘法次数(二进制思想)
- 2017.4.16 幂次方 思考记录
- POJ 2892-Tunnel Warfare(线段树单点更新-炸毁修复城市隧道)
- 关于Android单元测试
- java的枚举
- opencv学习(四十三)之图像的矩moments()
- mysql安装包方式安装及配置(Windows)
- How tomcat works——19 管理Servlet
- 初次接触堆排序