讨论 / 题解加自己的见解
丨Max丨 2016-08-08 20: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;

}

#1 gorewaiiieuo@2017-03-13 20:08:01
回复 删除
看了答主见解感觉回到了高中找规律题一样。。问题首先是能不能看出这个规律。。
#2 Gemengmeng@2018-01-08 23:46:06
回复 删除
完全不会怎么办
查看更多回复
提交回复