Ошибка "Неправельные операнды для операции %" - C (СИ)

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

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

Здравствуйте! Написала код, но выдает ошибку о invalid operands to binary % (have 'double' and 'int') в строках, где есть операция нахождения остатка от деления. Не знаю, как исправить...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
 
int main(int argc, char *argv[]) {
    setlocale(LC_ALL, "Rus");
    FILE *file;
    char mas[]={'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я', '.', ',', '-', '!', '?', ':', ';', '1', '2', '3', '4', '5', '6', '7', '8', '9', ' ', '\0'};
    int p=0, q=0, n=0, f=0, e=0, d=0, y1, y2, r, y, nod, i=0, j=0, h1=0, s=0, a, b;
    char t, w[50];
         if ((file = fopen("podpis.txt", "r"))==NULL)
          {
                puts ("Cannot open file.");
                exit (1);
          }
    printf ("Please, enter two prime number:\n");
    scanf ("%d", &p);
    scanf ("%d", &q);
    n=p*q;
    f=(p-1)*(q-1);
    printf ("Please, enter public exponent:\n");
    scanf ("%d", &e);
    a=f;
    b=e;
    if(b==0) 
      {
        nod=a;
        y=0;
      } 
     else{
            y2=0;
            y1=1;
            while (b>0)
            {
               q=a/b;
               r=a-q*b;
               y=y2-q*y1;
               a=b;
               b=r;
               y2=y1;
               y1=y;
           }
           nod=a;
           y=y2; 
           }
     d = f+y;
     printf ("%d\n", d);
     printf ("The open key is {%d, %d}\n\n", e, n);
     while((t=fgets(w, 50, file))!=EOF)
    {
        w[i]=t;
        i++;
    }
     for (i=0; i<strlen(w); i++)
       for (j=0; j<strlen(mas); j++)
          if (w[i]==mas[j])
          {
            printf ("w - %c, mas - %c\n", w[i], mas[j]);
            h1 = (h1+j)*(h1+j)%n;
            printf ("%d\n\n", h1);
        }
     s=pow(h1,d)%n;
     printf ("s = %d\n\n\n", s);
 
    return 0;
}

Решение задачи: «Ошибка "Неправельные операнды для операции %"»

textual
Листинг программы
s=((long int)pow(h1,d))%n;

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

  1. Переменная s используется для хранения результата вычисления.
  2. Функция pow используется для возведения в степень.
  3. Переменная h1 представляет собой основание степени.
  4. Переменная d представляет собой показатель степени.
  5. Переменная n представляет собой модуль, который используется в операции остатка от деления.

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


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

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

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