Вывести на экран таблицу всех значений суммы, которые не выходят за пределы диапазона типа long int - C (СИ)
Формулировка задачи:
Пользователь вводит целое положительное число n. Найти значение суммы
1^1 + 2^3 + 3^5 + 4^7 + ... + n^(2n-1)
Вывести на экран таблицу всех значений суммы, которые не выходят за пределы
диапазона типа long int. Таблица должна помещаться на экране в нескольких столбцах
так, чтобы при распечатывании она занимала меньше места на бумаге
помогите пожалуйста
Решение задачи: «Вывести на экран таблицу всех значений суммы, которые не выходят за пределы диапазона типа long int»
textual
Листинг программы
#include <stdio.h>
#define LIMIT 2147483647
int degree(int number) {
return number * 2 - 1;
}
int average(long int a, long int b, long int c) {
if ( (a * b)/2 + c/2 < LIMIT/2 ) {
return 1;
}
return 0;
}
long int value(int number, long int sum) {
int max = degree(number);
for ( long int i = 1, temp = number; i < max; i++ ) {
if ( average(number, temp, sum) ) {
number *= temp;
} else {
return LIMIT - sum;;
}
}
return number;
}
int main() {
long int sum = 0;
for ( int i = 1, sum = 0; sum < LIMIT; i++ ) {
sum += value(i, sum);
printf("%ld\n", sum);
}
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с входными-выходными данными и константами.
- Объявление константы LIMIT, которая представляет из себя максимально возможное значение для типа long int.
- Реализация функции degree, которая принимает целое число и возвращает его удвоенное значение, за исключением случаев, когда число является нечетным - в этом случае функция возвращает число, умноженное на -1.
- Реализация функции average, которая принимает три целых числа и возвращает 1, если их сумма не превышает половину значения константы LIMIT, иначе возвращает 0.
- Реализация функции value, которая принимает целое число и сумму, затем использует функцию degree для определения максимального значения числа, которое не будет превышать LIMIT. Затем, в цикле, функция проверяет каждое значение, начиная с 1 и до найденного максимального значения, на предмет того, превышает ли сумма чисел значение LIMIT. Если сумма превышает LIMIT, функция возвращает LIMIT - текущая сумма.
- В функции main создается переменная sum, которая инициализируется нулем.
- Затем в цикле, для каждого числа от 1 до LIMIT, вызывается функция value, результат которой добавляется к переменной sum. После этого число и сумма выводятся на экран.
- Цикл продолжается до тех пор, пока значение переменной sum не превысит LIMIT.
- Программа заканчивает работу и возвращает 0, что означает успешное выполнение.