题解 P1062 【数列】

· · 题解

(题目为啥要强调用十进制输出呢,明明就是故意提醒)

分析一下样例

k=3$时,数列为:$1,3,4,9,10,12,13..

转换成三进制就是:1,10,11,100,101,110,111..

看起来像是二进制,转化成十进制看看

1,2,3,4,5,6,7..

显然,第n项就是n.

程序就把这个过程逆回去,先把n转换成二进制,再把它当成K进制,重新转换为十进制.

#include <iostream>
#include <stack>
#include <cmath>
using namespace std;

long long k, n, ans;
stack<int> S;

int main() {
    cin >> k >> n;
    while(n) S.push(n & 1), n >>= 1;
    while(!S.empty()) ans += S.top() * pow(k, S.size()-1), S.pop();
    cout << ans << endl;
    return 0;
}