题目描述
给定一个正整数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)。(整数前不要有空格和其他符号)。
in:
3 100
out:
981
开始的时候没发现这就是一道进制转化问题,一直在寻找数列规律性,即先打了一个表,(0,1,01,2,02……),打表完事以后再挨个乘。ac50%....
后来才恍然大悟,原来就是进制转化问题。即把10进制的数n转化为k进制数是多少。
可以作为进制转化的模板题,即按照二进制来,通过&1取得每一位的二进制数是多少,用k乘幂即可。
#include <stdio.h>
#include <string.h>
/*WA 50
int a[1010][25], b[1010], n;
int pow(int a, int b)
{
if(b == 0)
return 1;
if(b == 1)
return a;
int t = pow(a, b/2);
t = t * t;
if(b % 2 == 1)
t = t * a;
return t;
}
void lie()
{
int i, j, k;
a[0][0] = 0;
b[0] = 1;
a[1][0] = 1;
b[1] = 1;
int t = 1;
for(i = 2 ; i <= n ;)
{
int x = i-1;
for(j = 0 ; j < x ; j++)
{
for(k = 0 ; k < b[j] ; k++)
{
a[i][k] = a[j][k];
}
a[i][k] = t;
b[i] = b[j] + 1;
i++;
}
t++;
a[i][0] = t;
b[i] = 1;
i++;
}
}
int main()
{
int i, j, k;
scanf("%d %d", &k, &n);
lie();
int ans = 0;
for(i = 0 ; i < b[n-1] ; i++)
{
ans += pow(k, a[n-1][i]);
}
printf("%d\n", ans);
return 0;
}*/
int main()
{
int n, k, ans = 0, a = 1;
scanf("%d %d", &k, &n);
while(n)
{
ans += (n & 1) * a;
a *= k;
n >>= 1;
}
printf("%d\n", ans);
return 0;
}