Мне нужно написать программу, которая будет получать 2 целых числа. Затем программа отобразит сумму всех целых чисел, которые делятся на 4 и 6 между двумя числами.
Я попытался сделать код ниже:
#include <iostream>
using namespace std;
int main()
{
int num1, num2, sum=0;
cout << "Input first number : ";
cin >> num1;
cout << "Input second number : ";
cin >> num2;
for(int i = num1 + 1;i<num2;i++)
{
if ( num1 % 4 == 0 && num2 % 6 == 0)
{
sum = sum + i;
}
}
cout<< "The sum of all integers that are both divisible by 4 and 6 between " << num1 << " and " << num2 << " is " << sum << endl;
system("pause");
return 0;
}
Мой ожидаемый результат должен быть
Введите первое число: 4
Введите второе число: 12
Сумма всех целых чисел, которые делятся на 4 и 6 между 4 и 12, равна 12.
"поскольку 12 - единственное число, которое делится и на 4, и на 6"
Но реальные результаты
Введите первое число: 4
Введите второе число: 12
Сумма всех целых чисел, которые делятся на 4 и 6 между 4 и 12, равна 56.
Подсказка: число делится и на 4, и на 6, если оно делится на 12...
Благодарим вас за отправку вопроса на StackOverflow! Пожалуйста, включите достаточный код (включая операторы #include), чтобы участник мог скомпилировать ваш код, просто вырезав и вставив его.
О используя пространство имен std...
Боковое примечание: задача консольного приложения не состоит в том, чтобы держать консоль открытой. Это только предотвращает использование программы в сценарии (где нет тела для нажатия клавиши...). Поэтому вам не следует делать такие вещи, как system("pause")
, getchar()
или getch()
(из conio.h). Вместо этого сначала откройте консоль (cmd.exe), перейдите к своей программе и запустите ее из консоли...
Вот правильная программа:
#include <iostream>
using namespace std;
int main()
{
int num1, num2, sum=0;
cout << "Input first number : ";
cin >> num1;
cout << "Input second number : ";
cin >> num2;
for(int i = num1;i<=num2;i++) // if you want to include num1 and num2
//for(int i = num1+1;i<num2;i++) // if you do not want to include num1 and num2
{
if ( i % 4 == 0 && i % 6 == 0)
{
sum = sum + i;
}
}
cout<< "The sum of all integers that are both divisible by 4 and 6 between " << num1 << " and " << num2 << " is " << sum << endl;
system("pause");
return 0;
}
Я бы предположил, что нижняя граница тоже должна быть проверена (так что нет + 1 тогда...).
Условие в if ( num1 % 4 == 0 && num2 % 6 == 0 ) неверно.
Вам нужно изменить его на: -
(i % 4 == 0 && i % 6 == 0)
Как уже говорилось, вам нужна только проверка на делимость на 12, и вам нужно использовать i
в качестве проверки в условном выражении. В моей системе нет pause()
, поэтому вы можете просто использовать другой вызов cin >> для создания паузы. Конечно, тогда вы должны ввести букву/цифру. Недостаточно места.
#include <iostream>
using namespace std;
int main()
{
int num1, num2, sum=0;
int wait_var;
cout << "Input first number : ";
cin >> num1;
cout << "Input second number : ";
cin >> num2;
for(int i = num1 + 1;i<num2;i++) // bounds are correct
{
if ( i % 12 == 0) // check for divisibility by 12 of i, not of the num1 and num2
{
sum = sum + i;
}
}
cout<< "The sum of all integers that are both divisible by 4 and 6 between " << num1 << " and " << num2 << " is " << sum << endl;
cin >> wait_var;
return 0;
}
Есть две проблемы:
Сначала, поскольку 4 и 12, используемые в качестве границ, должны давать 12, а не 0, вам также необходимо включить границы в свой цикл:
for(int i = num1; i <= num2; i++)
// ^ (!)
// ^ - 1 dropped
Тогда ваше условие для выбора слагаемых неверно:
if (num1 % 4 == 0 && num2 % 6 == 0)
Имейте в виду, что это всегда верно для num1 == 4
и num2 == 12
, поэтому вы суммируете числа все между ними... На самом деле вам нужно проверить переменную, находящуюся между этими двумя границами, а именно i
:
if (i % 4 == 0 && i % 6 == 0) // i will be 4, 5, ... , 11, 12 (with above fixed loop)
Кроме того, мы можем сделать его немного короче: число делится и на 4, и на 6, если оно делится на 12. Таким образом, ваш чек может выглядеть просто так:
if (i % 12 == 0)
Думаю, вы хотите проверить, делится ли
i
на 4 и 6, тогда как сейчас вы проверяете, делятся лиnum1
иnum2
соответственно. Кроме того, если вы хотите проверить междуnum1
иnum2
включительно, вам нужно тщательно изучить начало цикла for.