4850: 数列
将第N位换算成二进制
N=1 001 3^0
N=2 010 3^1
N=3 011 3^0 + 3^1;
N=4 100 3^2
可得第N位数的值就是N的二进制位看成k进制的位即可
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<iostream>
#define ll long long int
using namespace std;
int bit[11]; //因为2^10<=N<=1000<2^11所以存11位就好了
void getbit(int i){ //获取N的每一个bit位
int x=i;
int cnt=0;
while(cnt<11){
bit[cnt++]=(x%2==0?0:1);
x/=2;
}
}
ll qpow(int k,int j){ //求幂
ll ans=1;
ll cnt=k;
while(j){
if(j&1)ans*=cnt;
cnt*=cnt;
j>>=1;
}
return ans;
}
int main(int argc, char const *argv[])
{
int k,n;
scanf("%d %d",&k,&n);
ll sum=0;
getbit(n);
for(int j=0;j<11;j++){
if(bit[j])sum+=qpow(k,j); //按位展开权值相加
}
printf("%lld\n",sum);
return 0;
}