我正在尝试解决一个问题:
编写一个计算非负整数之间的差的程序。
输入:
输入的每一行都由一对整数组成。每个整数介于0到10之间,提高到15(含)。输入在文件末尾终止。
输出:
对于输入中的每对整数,输出一行,其中包含它们的差的绝对值。
这是我的解决方案:

#include <iostream>
#include <cmath>
using namespace std;

int main(){
    int x;
    int y;
    int z;

    cin >> x >> y;

    if(x && y <= 1000000000000000){
        z=x-y;
        cout << std::abs (z);
    }
}
但是问题是我的答案是错误的,请帮助我更正我的答案并解释为什么它是错误的。

最佳答案

对于初学者,通常int类型的对象的有效值范围小于1000000000000000
您应该使用足够宽的整数类型来存储如此大的值。适当的类型是unsigned long long int,因为根据分配,输入的值是非负的。

否则,您还需要检查值是否大于或等于零的负数。

还有if语句中的条件

if(x && y <= 1000000000000000){

是错的。相当于
if(x && ( y <= 1000000000000000 )){

反过来相当于
if( ( x != 0 ) && ( y <= 1000000000000000 )){

它与
if ( ( x <= 1000000000000000 ) && ( y <= 1000000000000000 ) ){

该程序可以如下所示
#include <iostream>

int main()
{
    const unsigned long long int UPPER_VALUE = 1000000000000000;
    unsigned long long int x, y;

    while ( std::cin >> x >> y )
    {
        if ( x <= UPPER_VALUE && y <= UPPER_VALUE )
        {
            std::cout << "The difference between the numbers is "
                      << ( x < y ? y - x : x - y )
                      << std::endl;
        }
        else
        {
            std::cout << "The numbers shall be less than or equal to "
                      << UPPER_VALUE
                      << std::endl;
        }
    }
}

例如,如果要输入这些值
1000000000000000 1000000000000000
1000000000000001 1000000000000000
1 2

然后程序输出看起来像
The difference between the numbers is 0
The numbers shall be less than or equal to 1000000000000000
The difference between the numbers is 1

10-08 15:48