丨Max丨 2016-08-08 05:21:19
点我顶贴
收藏
删除
#include<stdio.h>
int main()
{
int current, k, N, i=0,s=1,mod[100],total=0,j;
do{
scanf("%d%d", &k,&N);
} while (k < 3||k>15);
//这一道题其实就是进制的转化,先把所有的N转化成2进制的形式,用数组存起来,数组下标就是对应的幂,然后用k的幂全部加起来
//比如100的二进制是1100100,那么这道题就是2^6+2^5+2^2 ,然后转化成k 就是k^6+k^5+k^2
// 1,3,4,9,10,12,13,27,28,30… 这是k=3的时候 , 10是怎么来的,其实就是1+9 ,3+9 , 4+9,而9就是3^2,前面的数逐个跟k次幂相加得到的,k次幂前有多少个数,后面就有多少个数
//1 2 3 4 5 6 7 ... 这是k=2的时候,就更加容易发现了,5是由1+4,6是2+4 ,7是3+4
// 思考100 如何组成,其实就是64+32+4,64是第64个数,你会发现其实无论k怎么变,k次幂前的数都是成倍增加,所 以就是这个规律
while (N)
{
mod[i] = N % 2;
N = N / 2;
i++;
}
for ( j = i-1; j >= 0; j--){
s = 1;
for (current = 0; current < j; current++){
s = s*k*mod[j];
}
if (j == 0 && mod[j] == 0)
s = 0;
total = total + s;
}
printf("%d",total);
return 0;
}