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");
        }

    }

}
原文地址:https://www.cnblogs.com/hxer/p/5195643.html