2020.12.23猴子吃包子
题目描述
从前,有一只吃包子很厉害的猴子,它可以吃无数个包子,但是,它吃不同的包子速度也不同;肉包每秒钟吃x个;韭菜包每秒钟吃y个;没有馅的包子每秒钟吃z个;现在有x1个肉包,y1个韭菜包,z1个没有馅的包子;问:猴子吃完这些包子要多久?结果保留p位小数。
输入格式
输入1行,包含7个整数,分别表示吃不同包子的速度和不同包子的个数和保留的位数。
输出格式
输出一行,包含1个实数,表示吃完所有包子的时间。
样例输入
4 3 2 20 30 15 2
样例输出
22.50
数据规模和约定
0<p<=1000
思路
-
由于p的范围超过了double可表示的最大范围,所以此处易错!需要手动模拟小数除法
-
在int型数据计算时:
- 不可:sum = sum=x1/x+y1/y+z1/z,会失去精度!
- 应该:sum=(x1yz+y1xz+z1xy)/(xyz),只调用手除函数一次。
代码
public static void main(String[] args) {
try (Scanner input = new Scanner(System.in)) {
int x,y,z,x1,y1,z1,zheng,yu,p;
int t;
x = input.nextInt();
y = input.nextInt();
z = input.nextInt();
x1 = input.nextInt();
y1 = input.nextInt();
z1 = input.nextInt();
p = input.nextInt();
zheng = (x1*y*z+y1*x*z+z1*x*y)/(x*y*z);
System.out.print(zheng + "."); //输出整数部分(加小数点)
yu = (x1*y*z+y1*x*z+z1*x*y)%(x*y*z);
while(p!=0) {
yu = yu*10;
t = yu/(x*y*z);
yu = yu%(x*y*z);
if(p == 1) {
yu = (yu*10)/(x*y*z);
if(yu >= 5)
t++;
}
System.out.print(t);
p--;
}
}
}