咖啡


私信TA

用户名:Tianxn

访问量:128078

签 名:

十年OI一场空,不开LL见祖宗。

等  级
排  名 8
经  验 26039
参赛次数 10
文章发表 197
年  龄 22
在职情况 学生
学  校 西安电子科技大学
专  业 软件工程

  自我简介:

解题思路:

1∗3^0                n=1      对应二进制1  
1*3^1+0*3^0          n=2      对应二进制10
1*3^1+1*3^0          n=3      对应二进制11
1*3^2+0*3^1+0*3^0    n=4      对应二进制100
.........................

也就是n对应的二进制的数位从右向左的权值依次是k^0,k^1,……,k^(n-1),对应的二进制的数位如果是1就加上对应权值即可(快速幂是乘上对应权值)。


参考代码:

#include <iostream>
using namespace std;

int k, n;
unsigned int ans, x = 1; // 只有这个类型能过~~难道它比longlong大?

int main()
{
	cin >> k >> n;
	while (n)
	{
		if (n & 1) ans += x;
		x *= k;
		n >>= 1;
	}
	cout << ans << endl;
	return 0;
}


 

0.0分

5 人评分

  评论区