c++ - 最简单的两个数相加的程序,online judge为什么通不过?
PHPz
PHPz 2017-04-17 13:00:15
0
4
673

题目是输入两个正整数,输出他们的和。输入的数在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;

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

PHPz
PHPz

学习是最好的投资!

全員に返信(4)
Peter_Zhu

是因为超过一百万的结果会被cout输出成科学计数法形式,所以有的case无法通过。
用double而不是int,虽然确实浪费内存,但是在只做正整数的加法的时候并不会因为精度而出错。

いいねを押す +0
迷茫

两个数都是正整数的话,输出的数也肯定是整数。题意已经交代清楚的话,没必要用double

いいねを押す +0
阿神

你都换成整数就行了,不懂为什么要用浮点数,浮点数跟精度有关,容易出错。

いいねを押す +0
左手右手慢动作

是不是有些大的数字浮点加以后会出现舍入误差而使得结果为xxx.00000001之类的
既然说明用整数也给了范围 那用普通的int类型即可 在现在所有主流平台上int至少都32位了

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!