题目描述 Description
给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是:
1,3,4,9,10,12,13,…
(该序列实际上就是:30,31,30+31,32,30+32,31+32,30+31+32,…)
请你求出这个序列的第N项的值(用10进制数表示)。
例如,对于k=3,N=100,正确答案应该是981。
输入描述 Input Description
只有1行,为2个正整数,用一个空格隔开:
k N(k、N的含义与上述的问题描述一致,且3≤k≤15,10≤N≤1000)
输出描述 Output Description
为计算结果,是一个正整数(可能较大你懂的)。(整数前不要有空格和其他符号)
样例输入 Sample Input
3 100
样例输出 Sample Output
981
#include<iostream> #include<cstring> #include<cstdio> #include<cmath> using namespace std; long long pw1[12]; long long pw2[12]; long long sum[12]; int main() { long long k,n,i,j; pw2[0] = 1; sum[0] = 1; for(i = 1;i<=10;i++) { pw2[i] = pw2[i-1]*2; sum[i] = sum[i-1]+pw2[i]; } cin>>k>>n; pw1[0] = 1; for(i = 1;i<=10;i++) pw1[i] = pw1[i-1]*k; long long ans = 0; while(n) { for(i = 0;i<=10;i++) if(pw2[i]>n) break; i--; n-=pw2[i]; ans+=pw1[i]; } cout<<ans<<endl; return 0; }