数列
来源:互联网 发布:高智商犯罪 知乎 编辑:程序博客网 时间:2024/04/27 21:43
讲解部分纯属来自一位大神,本人转载,代码为个人理解之后,敲的一个代码。
题目描述
给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是:
1,3,4,9,10,12,13,…
(该序列实际上就是:3^0,3^1,3^0+3^1,3^2,3^0+3^2,3^1+3^2,
3^0+3^1+3^2,…)
请你求出这个序列的第N项的值(用10进制数表示)。
例如,对于k=3,N=100,正确答案应该是981。
输入格式
输入只有1行,为2个正整数,用一个空格隔开:
k N
(k、N的含义与上述的问题描述一致,且3≤k≤15,10≤N≤1000)。
输出格式
输出为计算结果,是一个正整数(在所有的测试数据中,结果均不超过2.1*10^9)。(整数前不要有空格和其他符号)
思路如下
这一道题其实就是进制的转化,先把所有的N转化成2进制的形式,用数组存起来,数组下标就是对应的幂,然后用k的幂全部加起来
比如100的二进制是1100100,那么这道题就是2^6+2^5+2^2 ,然后转化成k 就是k^6+k^5+k^2
1,3,4,9,10,12,13,27,28,30… 这是k=3的时候 , 10是怎么来的,其实就是1+9 ,3+9 , 4+9,而9就是3^2,前面的数逐个跟k次幂相加得到的,k次幂前有多少个数,后面就有多少个数
1 2 3 4 5 6 7 ... 这是k=2的时候,就更加容易发现了,5是由1+4,6是2+4 ,7是3+4
思考100 如何组成,其实就是64+32+4,64是第64个数,你会发现其实无论k怎么变,k次幂前的数都是成倍增加,所 以就是这个规律
代码如下
#include <iostream>#include <math.h>using namespace std;int a[105],index;int main(){ int k,x; cin>>k>>x; index =0; while(x) { a[index++] = x%2; x = x/2; } long long ans = 0; for(int i = index-1; i>=0; i--) { if(a[i]==1) { int s = 1; for(int j=0; j<i; j++) s = s*k; ans+=s; } } cout<<ans<<endl; return 0;}
阅读全文
0 0
- 数列
- 数列
- 数列
- 数列!!!
- 数列
- 数列
- 数列
- 数列
- 数列
- 数列
- 数列
- 数列
- 数列
- 数列
- 数列
- 数列
- 数列
- 数列
- GUI学习笔记
- win8,win10简捷快速重装系统
- 145. Binary Tree Postorder Traversa
- Python中的glob文件搜索模块
- 快速pca实现代码
- 数列
- selenium总结篇 常见的方法和页面元素的操作
- VMvare+mininet+Securecrt 远程连接虚拟机
- 20171030--数据库编程--day1笔记
- centOs下环境变量的配置
- uva11732 strcmp 字典树 存储
- 吴恩达deeplearning.ai课程系列笔记09
- 机器学习实战笔记-K近邻算法1(分类动作片与爱情片)
- STM32中GPIO的8种工作模式介绍