Всякий раз, когда я ввожу возраст 65 лет или меньше, я получаю число где-то меньше 2 100 000. Однако, когда я ввожу возраст 68 лет или выше, результат сразу же становится равным 18 446 744 071 590 568 320, что является максимальным значением для uint64_t. Я понятия не имею, почему такой скачок в результатах. До 2 100 000 работает нормально.
// How many seconds have I lived?
#include <stdio.h>
#include <string>
#include <cstdint>
using namespace std;
string addCommas(uint64_t answer);
int main ()
{
int seconds = 60, minutes = 60, hours = 24, days = 365;
int years; uint64_t secondsLived, secondsAwake;
printf("How many years have you lived? ");
scanf("%d",&years);
secondsLived = seconds*minutes*hours*days*years;
secondsAwake = (float)secondsLived*0.666;
printf("\nYou have existed for %s seconds\n",addCommas(secondsLived).c_str());
printf("You have been awake for %s seconds\n",addCommas(secondsAwake).c_str());
}
string addCommas(uint64_t answer){
string num = to_string(answer);
int insertplace = (int)num.length() - 3;
while (insertplace > 0) {
num.insert(insertplace, ",");
insertplace-=3;
}
return num;
}
Вот пара выводов:
How many years have you lived? 67
You have existed for 2,112,912,000 seconds
You have been awake for 1,407,199,392 seconds
How many years have you lived? 69
You have existed for 18,446,744,071,590,568,320 seconds
You have been awake for 12,285,531,553,090,562,048 seconds
printf
иscanf
, а что не так сcin
иcout
? - person yizzlez   schedule 13.06.2014uint64_t
; это 18 446 744 073 709 551 615. (Конечный0
должен был быть подсказкой.) В шестнадцатеричном формате это0xffffffff81b2e180
против0xffffffffffffffff
. - person Keith Thompson   schedule 13.06.2014