RQNOJ 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)。(整數前不要有空格和其他符號)。

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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章