【题目链接】
ybt 1937:【06NOIP普及组】数列
洛谷 P1062 [NOIP2006 普及组] 数列
【题目考点】
1. 数制
【解题思路】
如果k为2,那么这个数列
- 第1项为 2 0 2^0 20
- 第2项为 2 1 2^1 21
- 第3项为 2 1 + 2 0 2^1 + 2^0 21+20
- 第4项为 2 2 2^2 22
- 第i项为i在二进制下的按位权展开式,其值为i。
输入n和k后,数字n在二进制下做数字拆分,让n在二进制下的每一位数乘以一个“位权”,第i位的“位权”为 k i − 1 k^{i-1} ki−1,然后加和。
【题解代码】
解法1:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int k, n, q = 0;//q:指数
long long s = 0;
cin >> k >> n;
for(int a = n; a > 0; a /= 2, q++)
s += pow(k, q) * (a % 2); //k的q次方:位权
cout << s;
return 0;
}