题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
\frac{1}{1} + \frac{1}{2} + \frac{1}{4} + \frac{1}{8}+\cdots11+21+41+81+⋯
每项是前一项的一半,如果一共有 2020 项,求这个和是多少,结果用分数表示出来。
类似:\frac{3}{2}23,当然,这只是加了前 22 项而已。分子分母要求互质。
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
package 蓝桥真题2;
import java.util.Arrays;
public class 分数 {
public static void main(String[] args) {
//定义一个数字,存放20个数的分母
int[] arr = new int[20];
//给每个数的分母
for(int i = 0; i <= 19; i++) {
arr[i] = (int)Math.pow(2,i);
}
/**
* 换成同分母的数,求出所有的分子的和
*/
//分子和
int num = 0;
for(int i = 0; i < arr.length; i++) {
//arr[arr.length - 1] / arr[i] : 表示第i个数的分子
num += arr[arr.length - 1] / arr[i];
}
//求这二十的数的最大公约数
int a = gcd(num,arr[arr.length - 1]);
//分子分母约分
System.out.println((num/a) + "/" + (arr[arr.length-1]/a)); //1048575/524288
}
//欧几里得原理,求两个数的最大公约数
public static int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a%b); //最大公约数 = 较小的数 / 两个数相除的余数
}
}