以秒为单位计算年龄的程序无法正常工作

时间:2017-02-13 03:06:36

标签: c++

我正在尝试创建一个简单的程序,用于计算用户年龄(以秒为单位)后的年龄。它适用于0-68岁的年龄段,但任何年龄达到69岁或以上的人都会破坏程序,每次都会吐出相同的错误号码。该计划如下所列,任何帮助将不胜感激。

#include <iostream>
using namespace std;


int main()
{
    int age;

    cout << "Please enter your age in years ";
    cin  >> age; //Grabs the users age
    unsigned long long int result = age*365*24*60*60; //calculates the users age in seconds
    cout << "Your age in seconds is: " << result << " seconds";
    return 0;
}

2 个答案:

答案 0 :(得分:0)

C ++的工作方式基本上是:

int temp = age*365*24*60*60;
unsigned long long int result = static_cast<unsigned long long>(temp);

所以,您可能会看到表达式将在69年左右(在您的架构上)溢出int。因此,您希望强制计算在unsigned long long中起作用,因此最简单的方法是强制其中一个值为unsigned long long,这样表达式也会unsigned long long。例如:

unsigned long long int result = age*365ULL*24*60*60; //calculates the users age in seconds
//                                     ^^^ declare constant as type unsigned long long

答案 1 :(得分:0)

Unsigned Long int的范围是-2,147,483,648到2,147,483,647

因此,对于任何小于或等于68的值,以秒为单位的年龄为2,144,448,000或更低,属于范围。

然而,对于69岁的年龄,以秒为单位的年龄为2,175,984,000,超出了范围。

我建议使用long Double。