Быстрое возведение в степень - C (СИ)

Узнай цену своей работы

Формулировка задачи:

дано . Пользуясь только умножением, выполнить:
  1. вычислить за две операции;
  2. вычислить и за пять операций

Решение задачи: «Быстрое возведение в степень»

textual
Листинг программы
#include <stdio.h>
 
unsigned foo( unsigned* res, unsigned x ) {
    return ( *res *= x );
}
 
int main() {
    unsigned a = 2, b = a;
 
    fprintf(
            stdout, "%u\n",
            foo( &a, foo( &a, foo( &a, foo( &b, foo( &b, a ) ) ) ) ) 
            );
 
    return 0;
}

Объяснение кода листинга программы

В этом коде функция foo() быстро возводит в степень, используя для этого унарный оператор умножения (res = x). Однако, из-за того, что используется указатель на результат, который затем приводится к unsigned, происходит возведение в степень с плавающей точкой, что приводит к неопределенному поведению. Список действий:

  1. Включение заголовочного файла stdio.h.
  2. Определение функции foo() с двумя аргументами: указателем на результат и значением x.
  3. Возврат значения (res = x) из функции foo().
  4. Определение переменной a со значением 2.
  5. Определение переменной b со значением a.
  6. Вывод значения foo( &a, foo( &a, foo( &a, foo( &b, foo( &b, a ) ) ) ) в консоль.
  7. Возврат 0 из функции main(), чтобы указать, что программа успешно завершилась.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5
Похожие ответы