看这下面三个序列:
1, 3, 4, 9, 10, 12, 13,…
30, 31, 30+31, 32, 30+32, 31+32,30+31+32,…
1, 10, 11, 100, 101, 110, 111,...
是不是有种恍然大悟的感觉?所以,要求第N个数,你只要把N转为二进制,然后把所有 1 对应的权加起来就行了
#include <iostream>
using namespace std;
int main()
{
int k,n;
while(cin>>k>>n)
{
int ans = 0,m = 1;
while(n)
{
ans += (n%2)*m;
m *= k;
n /= 2;
}
cout<<ans<<endl;
}
return 0;
}