题目描述

给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是:

1,3,4,9,10,12,13,…

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

(该序列实际上就是: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)。(整数前不要有空格和其他符号)。

样例输入

3 100

样例输出

981

解题思路

  这道题的解题挺巧妙的;

1        3^0                      1

2        3^1                      10

3        3^1+3^0              11

4        3^2                      100

5        3^2+3^0              101

6         3^2+3^1             110

7        3^2+3^1+3^0      111

  解释:先将序号转换成二进制,接着对每一位进行计算(二进制数中有1的位置进行计算,0则忽略);

代码如下

RQNOJ PID4 数列 算法 第1张
 1 #include<iostream>
 2 using namespace std;
 3 int main(){
 4     int k, n, ans = 0, temp = 1;
 5     cin >> k >> n;
 6     while(n){
 7         if(n & 1)        ans += temp;
 8         temp *= k;
 9         n >>= 1;
10     }
11     cout << ans << endl;
12     return 0;
13 }
数列

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄