我正在尝试创建一个简单的程序,用于计算用户年龄(以秒为单位)后的年龄。它适用于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;
}
答案 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。