税码查,有什么问题,有什么区别?

  • 本文关键字:区别 问题 c# compare
  • 更新时间 :
  • 英文 :


请帮助我编写以下代码。代码本身来自UriOnlineJudge(https://www.urionlinejudge.com.br/judge/en/problems/view/1051),但在花了很多小时试图找出问题后,我不得不在这个网站上解决。第一个是:


double sal = 0.0, t8 = 0.0, t18 = 0.0, t28 = 0.0;
sal = double.Parse(Console.ReadLine());
if(sal <= 2000.0)
{
Console.WriteLine("Isento");
}else if( 2000.0 < sal && sal <= 3000.0)
{
t8 = ((sal - 2000.00) * 0.08);
Console.WriteLine("R$ " + String.Format("{0:F2}", t8));
} else if (3000.0 < sal && sal <= 4500.0)
{
t18 = ((sal - 3000.00) * 0.18 + 1000.00 * 0.08);
Console.WriteLine("R$ " + String.Format("{0:F2}", t18));
}
else
{
t28 = ((sal - 4500.00) * 0.28 + 1500.00 * 0.18 + 1000.00 * 0.08);
Console.WriteLine("R$ " + String.Format("{0:F2}", t28));
}
Console.ReadLine();

经过几个小时的思考,我决定让它变得"更干净"(更少的线条(,然后重新做了一遍,令人惊讶的是,它起到了作用,但我仍然不明白为什么,对我来说,它们是一样的第二个是:


double sal = 0.0, t8 = 0.0, t18 = 0.0, t28 = 0.0;
sal = double.Parse(Console.ReadLine());
if(sal <= 2000.0)
{
Console.WriteLine("Isento");
}else if( 2000.0 < sal && sal <= 3000.0)
{
sal = sal - 2000.0;
t8 = sal * 8.0 / 100.0;
t8 = sal + t8;
Console.WriteLine("R$ " + String.Format("{0:0.00}", t8));
} else if (3000.0 < sal && sal <= 4500.0)
{
sal = sal - 3000.0;
t8 = 1000.0 * 8.0 / 100.0;
t18 = sal;
t18 = t18 * 18.0 / 100.0;
t18 = t18 + t8;
Console.WriteLine("R$ " + String.Format("{0:0.00}", t18));
}
else
{
sal = sal - 4500.0;
t8 = 1000.0 * 8.0 / 100.0;
t18 = 1500.0 * 18.0 / 100.0;
t28 = sal;
t28 = t28 * 28.0 / 100.0;
t28 = t28 + t18 + t8;
Console.WriteLine("R$ " + String.Format("{0:0.00}", t28));
}
Console.ReadLine();

现在,我一直在反复测试它们,它们显示出相同的结果,但Uri先生的编译器不断向我显示,第二个代码仍然有5%的错误,请你帮我找出我的错误。

当遇到这样的问题时,编写测试用例

假设你的代码是第一个块,你的错误就在这里

return (sal - 2000.00) * 0.08;

应该是

return (sal - 2000.00) + (sal - 2000.00) * 0.08;

因为原始代码是

sal = sal - 2000.0;
t8 = sal * 8.0 / 100.0;
// you aren't doing this step 
t8 = sal + t8;

最新更新