hdu 5429 Geometric Progression 高精度浮点数(java版本)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5429
题意:给一段长度不超过100的每个数字(可以是浮点数)的长度不超过1000的序列,问这个序列是否是一个等比数列;
等比数列以第一个数为首项,并且r != 0,一个坑点
之前我写的hdu1002的高精度在这里不能用的,因为我的高精度里面还只能是正整数,这时直接使用java的BigDecimal即可;
ps:特别要注意 1 0这个序列不是等比序列!还有 大数比较是否相等,要使用函数,不能使用==,==是判断两个对象是否是一个对象
java时间很慢,并且空间很大啊。。343MS 11104K
import java.math.*; import java.util.*; public class Main { public static void main(String[] args)throws Exception { BigDecimal[] bigDecimals = new BigDecimal[3]; int n,T; Scanner scanner = new Scanner(System.in); T = scanner.nextInt(); while(T-- > 0){ n = scanner.nextInt(); boolean flag = true; int num = 0; for(int i = 1;i <= n;i++){ bigDecimals[i%3] = scanner.nextBigDecimal(); if(i > 2 && flag){ BigDecimal a = bigDecimals[(i-1)%3].multiply(bigDecimals[(i-1)%3]); BigDecimal b = bigDecimals[(i-2)%3].multiply(bigDecimals[i%3]); if(a.compareTo(b) != 0){ flag = false; } } if(bigDecimals[i%3].compareTo(BigDecimal.valueOf(0)) == 0) num++; if(num > 0 && num != i) flag = false; } System.out.println(flag?"Yes":"No"); } } }