题目描述
给定一个正整数k(3≤k≤15)k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3k=3时,这个序列是:
1,3,4,9,10,12,13,...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,...30,31,30+31,32,30+32,31+32,30+31+32,...)
请你求出这个序列的第NN项的值(用1010进制数表示)。
例如,对于k=3k=3,N=100N=100,正确答案应该是981981。
输入格式
22个正整数,用一个空格隔开:
k NkN (kk、NN的含义与上述的问题描述一致,且3≤k≤15,10≤N≤10003≤k≤15,10≤N≤1000)。
输出格式
11个正整数。(整数前不要有空格和其他符号)。
输入数据 1
3 100
Copy
输出数据 1
981
Copy
来源
NOIP 2006 普及组 第四题
代码:
cpp
#include <iostream>
#include <cmath>
using namespace std;
/**
* 判断 x 是不是 2 的 k(k为正整数)次方
*/
bool judgePow2(int x)
{
int y = log(x) / log(2);
int result = pow(2,y);
return result == x;
}
/**
* 递归
*/
int add(int n, int k)
{
if(n==1) return 1;
if(n==2) return k;
if(judgePow2(n) == true) {
int p = log(n)/log(2);
int result = pow(k,p);
return result;
}
int temp = log(n)/log(2);
int base = pow(k,temp);
int temp2 = pow(2,temp);
return base + add(n-temp2,k);
}
int main()
{
int m,n;
cin>>m;
cin>>n;
cout<<add(n,m)<<endl;
return 0;
}