把N化成二进制是关键,比如把序号10化成二进制就是1010,对于K=2来说第10个数就是2^3+2^1,对于k=3来说第10个数就是3^3+3^1;这里只需要把K替代一下就可以解决了
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<vector> using namespace std; int dig[24]; int main() { int k,n; while(cin>>k>>n) { int rel_k=k; memset(dig,0,sizeof(dig)); int temp=0; int total=0; while(n) { dig[temp++]=n%2; n/=2; } for(int i=0;i<temp;i++) { if(i>1) { rel_k*=k; } if(dig[i]&&i==0) { total+=1; } else if(dig[i]) { total+=rel_k; } } cout<<total<<endl; } return 0; }
原文:http://www.cnblogs.com/lulichuan/p/6358104.html