Просуммируйте все числа, кратные 9, из интервалов [50, 100], [300, 400] и [800, 1000] - C (СИ)
Формулировка задачи:
Помогите, пожалуйста. Просуммируйте все числа, кратные 9, из интервалов [50, 100], [300, 400]
и [800, 1000]. язык си
Решение задачи: «Просуммируйте все числа, кратные 9, из интервалов [50, 100], [300, 400] и [800, 1000]»
textual
Листинг программы
#include <stdio.h>
int multiple_sum(int nLeft, int nRight, int nDivider, int * pSum) {
if ( nDivider == 0 )
return -1;
while ( nLeft % nDivider )
++nLeft;
while ( nRight % nDivider )
--nRight;
if ( nLeft > nRight )
return -1;
*pSum = ( nLeft + nRight ) * ( ( nRight - nLeft ) / nDivider + 1 ) / 2;
return 0;
}
int main(void) {
int left, right, divider, sum;
while ( printf("Left: ") && scanf("%d", &left) == 1
&& printf("Right: ") && scanf("%d", &right) == 1
&& printf("Divider: ") && scanf("%d", ÷r) == 1 ) {
if ( multiple_sum(left, right, divider, &sum ) )
printf("Wrong parameters!\n");
else
printf("Sum: %d\n\n", sum);
}
return 0;
}
Объяснение кода листинга программы
- Объявлены функции
multiple_sumиmain. - В функции
multiple_sumпроверяется деление на ноль. - Затем в функции
multiple_sumдва цикла while:- Первый цикл while наращивает значение переменной
nLeftдо ближайшего большего числа, кратногоnDivider. - Второй цикл while уменьшает значение переменной
nRightдо ближайшего меньшего числа, кратногоnDivider. - Если
nLeftстановится большеnRight, функция возвращает -1.
- Первый цикл while наращивает значение переменной
- В функции
mainобъявлены переменныеleft,right,divider,sum. - Затем в функции
mainцикл while, который выполняется до тех пор, пока пользователь вводит корректные значения дляleft,right,divider. - Если значения введены корректно, вызывается функция
multiple_sum, и результат выводится на экран. - Если параметры введены некорректно, выводится сообщение об ошибке.