Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #include <limits.h>
- long int indecimal(long int n);
- long int indecimal(long int n)
- {
- long int x = 0;
- int f, i = 0;
- if (n >= 0)
- f = 1;
- else f = -1;
- while (abs(n) > 0)
- {
- x = x + (abs(n) % 10) * pow(3, i);
- n = n / 10;
- i++;
- }
- x = x * f;
- return x;
- }
- long int internary(long int n);
- long int internary(long int n)
- {
- long int x = 0;
- int f, i = 1;
- if (n >= 0)
- f = 1;
- else f = -1;
- while (abs(n) > 0)
- {
- x = x + (abs(n) % 3) * i;
- n = n / 3;
- i *= 10;
- }
- x = x * f;
- return x;
- }
- int summ(long int a, long int b, long int *sum);
- int summ(long int a, long int b, long int *sum)
- {
- if (LONG_MAX - abs(a) >= b)
- //если "a" будет отрицательным, то произойдет переполнение, поэтому abs(a);;
- //eсли написать еще одно условие LONG_MIN - a <= b, то произойдет переполнение в отрицательную сторону
- //можно вообще не писать это условие, я думаю, скажешь ему это, если что
- {
- *sum = internary(indecimal(b) + indecimal(a));
- return 0;
- }
- else return 1;
- }
- int def(long int a, long int b, long int *dif);
- int def(long int a, long int b, long int *dif)
- {
- if (LONG_MIN + abs(b) <= a)
- // аналогично ситуации в функции summ;;
- {
- *dif = internary(indecimal(a) - indecimal(b));
- return 0;
- }
- else return 1;
- }
- int proizvedenie(long int a, long int b, long int *pr);
- int proizvedenie(long int a, long int b, long int *pr)
- {
- if ( (LONG_MAX/abs(b) >= a) && (LONG_MIN/abs(b) <= a) )
- {
- *pr = internary(indecimal(a) * indecimal(b));
- return 0;
- }
- else return 1;
- }
- int stepen(long int a, long int b, long int *st);
- int stepen(long int a, long int b, long int *st)
- {
- if ( (b > 0) && (pow(LONG_MAX, 1.0/b) >= (double)a) )
- {
- *st = internary((pow(indecimal(a), indecimal(b))));
- return 0;
- }
- else return 1;
- }
- int main()
- {
- long int a , b , sum, dif, pr, st, x, y, pr1, dif1, dif2, k = 0;
- scanf("%ld %ld", &a, &b );
- if (summ(a, b, &sum) == 1)
- printf("Переполнение при сложении двух чисел\n");
- else
- {
- k++;
- printf("%ld\n", sum);
- }
- if (def(a, b, &dif) == 1)
- printf("Переполнение при вычитании двух чисел\n");
- else
- {
- k++;
- printf("%ld\n", dif);
- }
- if (proizvedenie(a, b, &pr) == 1)
- printf("Переполнение при умножении двух чисел\n");
- else
- {
- k++;
- printf("%ld\n", pr);
- }
- if (stepen(a, b, &st) == 1)
- printf("Переполнение при возведении в степень\n");
- else
- {
- k++;
- printf("%ld\n", st);
- }
- if (k < 4) printf("Переполение в одной или нескольких из функций");
- else
- {
- stepen(a, 2, &st);
- proizvedenie(st, b, &pr);
- def(a, b, &dif);
- proizvedenie(a, dif, &pr1);
- def(pr, pr1, &dif2);
- summ(dif2, a, &sum);
- printf("%ld\n", sum);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement