第八届蓝桥杯-分数

标题:分数
1/1 + 1/2 + 1/4 + 1/8 + 1/16 + .... 
每项是前一项的一半,如果一共有20,
求这个和是多少,结果用分数表示出来。
类似:
3/2
当然,这只是加了前2项而已。分子分母要求互质。
注意:
需要提交的是已经约分过的分数,中间任何位置不能含有空格。
请不要填写任何多余的文字或符号。

解决方案:

  • 此题规模较小,直接用等比公式求和就行,得出结果后看看能不能约分。
  • 展开式子:[(1/2)^0 + (1/2) ^1 + (1/2) ^2+ ……+(1/2) ^19 ] == [2 ^19+2 ^18+ ……+2 ^0] / (2 ^19) == (2 ^20 -1)/(2 ^19)之后再约分

代码:

#include <iostream>

using namespace std;

int pow_2(int n){
	int x = 2;			//基数
	int res = 1;		//答案
	while(n > 0){		//指数大于0 
		if(n & 1){		//奇次幂 
			res *= x;	//乘以基数 
		}
		n >>= 1;		//指数减半 
		x *= x;			//基数相乘 
	} 
	return res;			//返回结果 
}

int gcd(int a,int b){
	if(b == 0)	return a;
	return gcd(b,a%b);
}


int main(){
	int x = gcd(pow_2(20)-1,pow_2(19));//最大公约数
	cout << (pow_2(20)-1)/x << "/" << (pow_2(19)/x) << endl;	//最终结果
	return 0;
}
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值