题目
资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
从前,有一只吃包子很厉害的猴子,它可以吃无数个包子,但是,它吃不同的包子速度也不同;肉包每秒钟吃x个;韭菜包每秒钟吃y个;没有馅的包子每秒钟吃z个;现在有x1个肉包,y1个韭菜包,z1个没有馅的包子;问:猴子吃完这些包子要多久?结果保留p位小数。
输入格式
输入1行,包含7个整数,分别表示吃不同包子的速度和不同包子的个数和保留的位数。
输出格式
输出一行,包含1个实数,表示吃完所有包子的时间。
样例输入
4 3 2 20 30 15 2
样例输出
22.50
数据规模和约定
0<x<100;0<y<100;0<z<100;0<x1<=1000000;0<y1<=10000000;0<z1<=10000000;0<p<=1000
分析
- 就题上给的这个p的限制范围就大离谱,就算是double精度也就在小数点后六位,所以第一感觉就是这题不能用double做,BigDecima(一般用不到)就很好的解决了这一问题。
- 但BigDecima是没有办法进行“+”“-”“*”“/”运算的,这就需要我们了解它的几个方法和一个技术
- 方法:
-
- BigDecima两对象相加
add(BigDecimal augend)
返回 BigDecimal ,其值是 (this + augend) ,其标为 max(this.scale(), augend.scale()) 。
-
- BigDecima两对象相除
divide(BigDecimal divisor)
返回BigDecimal ,其值为(this / divisor) ,优先级为(this.scale() - divisor.scale()) ; 如果不能表示确切的商(因为它具有非终止的十进制扩展),则抛出一个ArithmeticException 。
-
- BigDecima两对象相除余小数点后scale位,RoundingMode为采用的技术
divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
返回一个 BigDecimal ,其值为 (this / divisor) ,其比例为指定。
- 技术:
- ROUND_HALF_DOWN
四舍五入模式向“最近邻居”转弯,除非这两个邻居都是等距离的,在这种情况下,这是倒圆的。
代码
import java.math.BigDecimal;
import java.util.Scanner;
/**
* @Author: Re
* @Date: 2021/2/6 21:37
*/
public class Main {
private static void chiTao(){
Scanner scanner=new Scanner(System.in);
BigDecimal a,b,c,d,e,f,sum;
int g;
a = scanner.nextBigDecimal();
b = scanner.nextBigDecimal();
c = scanner.nextBigDecimal();
d = scanner.nextBigDecimal();
e = scanner.nextBigDecimal();
f = scanner.nextBigDecimal();
g = scanner.nextInt();
sum = d.divide(a,g,BigDecimal.ROUND_HALF_DOWN).add(e.divide(b,g,BigDecimal.ROUND_HALF_DOWN).add(f.divide(c,g,BigDecimal.ROUND_HALF_DOWN)));
System.out.print(sum);
}
public static void main(String[] args) {
chiTao();
}
}