题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
11+12+14+18+⋯\frac{1}{1} + \frac{1}{2} + \frac{1}{4} + \frac{1}{8}+\cdots11+21+41+81+⋯
每项是前一项的一半,如果一共有 202020 项,求这个和是多少,结果用分数表示出来。
类似:32\frac{3}{2}23,当然,这只是加了前 222 项而已。分子分母要求互质。
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
解法一:python 3
import os
import sys
# 请在此输入您的代码
from fractions import Fraction
mu=2**19
zi=int(1*((1-2**20)/(1-2)))
print(Fraction(zi,mu))#Fraction可以自动约分,不要用format
解法二:python 3
import os
import sys
# 请在此输入您的代码
b = 0
a = 1
for i in range(20):
b += a
a *= 2
print('%d/%d'%(b,a/2))
解法三:c++
#include <iostream>
#include <cmath>
using namespace std;
long long gcd(long long a,long long b)
{
return b == 0 ? a : gcd(b, a%b);
}
int main()
{
long long a = 0, b = 0;
b = pow(double(2), double(19)); //分母
for (int i = 1; i <= 20; ++i)
{
a += (b / pow(double(2),double(i-1))); //通分后的分子
}
cout << a / gcd(a, b) << "/" << b / gcd(a, b) << endl;
return 0;
}
解法四:c语言
#include<stdio.h>
int main()
{
int i,j,b=1,c=0,a=1;
for(i=1;i<20;i++)
{
a = a*2;
b += a;
}
printf("%d/%d\n",b,a);
return 0;
}
解法五:Java
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
static int GCD(int x,int y){//求最大公约数
if(y==0){
return x;
}
return GCD(y,x%y);//是x%y,不是x/y
}
public static void main(String[] args) {
int bot=1;
int top=1;
for (int i = 1; i <20 ; i++) {
top=2*top+1;
bot=bot*2;
}
int gcd=top>bot?GCD(top,bot):GCD(bot,top);//没有if
System.out.println(top/gcd+"/"+bot/gcd);
}
}