Ошибка "Неправельные операнды для операции %" - 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;
Объяснение кода листинга программы
- Переменная
sиспользуется для хранения результата вычисления. - Функция
powиспользуется для возведения в степень. - Переменная
h1представляет собой основание степени. - Переменная
dпредставляет собой показатель степени. - Переменная
nпредставляет собой модуль, который используется в операции остатка от деления.