Я пытаюсь научиться программировать на C ++, поэтому я создал что-то, что позволило вам ввести минимальный и максимальный параметр, и он будет вычислять k+(k+1)+(k+2)+...+(max)
, и сравнил его с аналитическим значением, используя стандартную формулу (n(n+1)/2)
. Кажется, это работает нормально, когда я пробую небольшие числа, но когда, например, пытаюсь min=4
, max=4*10^5
(400 000), я получаю отрицательный результат для суммы, но положительный результат проверяется аналитическим методом, даже после того, как изменив тип с «int» на «long». Пробуя другие комбинации, я добился противоположного, аналитический метод привел к отрицательной сумме. Я подозреваю, что это связано с тем фактом, что тип int
может доходить до определенного числа цифр, но я хотел получить какое-то подтверждение на этот счет, и если это не так, то какова реальная проблема. Код указан ниже:
#include <iostream>
// Values are inconsistent when paramin,parammax become large.
// For example, try (parammin,parammax)=(4,400,000)
int main() {
int parammax,parammin;
std::cout << "Input a minimum, then maximum parameter to sum up to" << std::endl;
std::cin >> parammin >> parammax;
int sum=0;
for (int iter = parammin; iter <= parammax; iter++){
sum += iter;
}
std::cout << "The sum is: " << sum << std::endl;
const int analyticalmethod = (parammax*(parammax+1)-parammin*(parammin-1))/2;
std::cout << "The analytical result for the sum is,"
" via (max*(max+1)-min*(min-1))/2: "
<< analyticalmethod << std::endl;
return 0;
}