0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
#include <stdio.h>
#include <string>
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
char s[100];
int n1 = 0,eq = 0,i = 0,o = 0,e = 0;
scanf("%s",&s);
int len;
len = strlen(s);
for(i = 0; i <= len; i++)
{
if ((s[i] == '+') || (s[i] == '-') || (s[i] == '/') || (s[i] == '*'))
{
if (s[i-1] != '=')
{
n1 = i;
o = 1;
}
if ((n1 == '-') && (s[i-1] == '+') || (s[i-1] == '-') || (s[i-1] == '/') || (s[i-1] == '*'))
{
n1--;
o = 1;
}
}
if (s[i] == '=')
{
eq = i;
e++;
}
}
if ((eq == 0) || (n1 == 0) || (e != 1) || (o != 1))
{
printf("ERROR");
return 0;
}
char* err ;
//begin copy-paste :(
char s1[100] = "0";
for(i = 0; i < n1; i++)
{
s1[i] = s[i];
}
long l1 = strtol(s1, &err, 10);
if (*err)
{
printf("ERROR");
return 0;
}
//еще 10-15 строк
//end copy-paste :(
//begin new copy-paste :((
if (s[n1] == '+')
{
if (l1 + l2 == l3)
{
printf("YES");
} else
{
printf("NO");
}
}
if (s[n1] == '/')
{
if (l2 != 0)
{
if((l1 / l2 == l3) && (l1 % l2 == 0))
{
printf("YES");
} else
{
printf("NO");
}
} else
{
printf("NO");
}
}
//Еще 10-15 строк
//end new copy-paste :((
return 0;
}
А всего-то надо проверить верно ли тождество. (Тождество очень простое и состоит из числа, операции («+», «-», «*», «/»), числа, знака равенства и числа)
Запостил:
bars66 ,
10.05.2012 (Updated 25.03.2018 )
и допустим первое число '-n' ...
if (s[0] == '-')
if (s[0-1] != '=')
/*...*/