https://www.rqnoj.cn/problem/4
题目描述
给定一个正整数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)。(整数前不要有空格和其他符号)。
/* ***********************************************
Author :Lu_cky
Created Time :2016年05月30日 星期一 23时05分31秒
File Name :main.cpp
************************************************ */
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
const int SIZE=1e3+10;
const int maxn=1<<30;
int my_pow(int x,int n){
int ret=1;
while(n>0){
if(n&1)ret*=x;
x*=x;
n>>=1;
}
return ret;
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int k,n;
while(scanf("%d%d",&k,&n)!=EOF){
int f=0,ans=0;
while(n){
if(n%2)ans+=my_pow(k,f);
f++;
n/=2;
}
printf("%d\n",ans);
}
return 0;
}