給定一個正整數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;
}