首頁  >  問答  >  主體

c++ - 最简单的两个数相加的程序,online judge为什么通不过?

题目是输入两个正整数,输出他们的和。输入的数在1(含)到10^6(含)之间。
scanfprintf就所有的测试用例都能通过,用cincout的话就总是有两个测试用例是wrong answer?但是实在看不出有什么问题。。
scanf的代码:

    double a, b;
    scanf("%lf %lf",&a,&b);
    printf("%.0lf", a + b);

cin,cout的代码:

    double x, y;
    cin >> x >> y;
    cout << x + y;

请问是哪儿可能导致这两种写法有不同的结果?

PHPzPHPz2765 天前736

全部回覆(4)我來回復

  • 天蓬老师

    天蓬老师2017-04-17 13:02:15

    是因為超過一百萬的結果會被cout輸出成科學計數法形式,所以有的case無法通過。
    用double而不是int,雖然確實浪費內存,但是在只做正整數的加法的時候並不會因為精度而出錯。

    回覆
    0
  • 迷茫

    迷茫2017-04-17 13:02:15

    兩個數都是正整數的話,輸出的數也一定是整數。題意已經交代清楚的話,沒必要用double

    回覆
    0
  • 阿神

    阿神2017-04-17 13:02:15

    你都換成整數就行了,不懂為什麼要用浮點數,浮點數跟精度有關,容易出錯。

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-17 13:02:15

    是不是有些大的數字浮點加以後會出現舍入誤差而使得結果為xxx.00000001之類的
    既然說明用整數也給了範圍那用普通的int類型即可在現在所有主流平台上int至少都32位了

    回覆
    0
  • 取消回覆