标题:分数
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;
}