Pooja希望从ATM取款X $ US。如果X是5的倍数,自动提款机将只接受交易,并且Pooja的账户余额有足够的现金来执行提款交易(包括银行手续费)。对于每次成功提款,银行收取0.50美元。
在尝试交易后计算Pooja的帐户余额。
输入
正整数0 < X <= 2000 - Pooja希望撤回的现金数量。
非负数0 <= Y <= 2000,精确度为两位数 - Pooja的初始账户余额。
输出
在尝试交易后输出帐户余额,以两位精度数字给出。如果账户中没有足够的资金来完成交易,请输出当前的银行余额。
import java.util.Scanner;
class HS08TEST {
public static void main(String[] args) {
Scanner s =new Scanner(System.in);
double x = s.nextDouble();
double y =s.nextDouble();
if( x>=0.00 && x<=2000.00 &&y>=0.00 && y<=2000.00){
if(x==0){
System.out.printf("%.2f",y);
}
else if(x%5==0.00 && x<=y){
System.out.printf("%.2f",y-x-0.50);
}
else{
System.out.printf("%.2f",y);
}
}
}
}
代码在我的IDE上工作正常,但它在codechef上显示错误的答案。当我在codechef上编译它时显示“错误的答案”。我没有得到真实的地方问题。请帮我解决这个问题。
答案 0 :(得分:0)
问题陈述说&#34;有足够的现金来执行提款交易(包括银行手续费)&#34;,但是银行费用在测试中被忽略。
该程序允许余额在x = 5,y = 5.07时变为负值。
此外,不要使用double作为需要精确计算的短小数。见Is floating point math broken?
答案 1 :(得分:0)
我编辑了我的代码,这个新代码运行正常。最初我没有正确地关注数据类型。
import java.util.Scanner;
public class HS08TEST {
public static void main(String[] args) {
Scanner s =new Scanner(System.in);
int x = s.nextInt();
float y =s.nextFloat();
if( x>=0 && x<=2000 &&y>=0&& y<=2000){
if(x==0){
System.out.printf("%.2f",y);
}
else if(x%5==0 && x+0.50<=y){
System.out.printf("%.2f",y-x-0.50);
}
else{
System.out.printf("%.2f",y);
}
}
}
}