Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // main.c
- // Assigend_3
- //
- // Created by yarin ben baruch on 07/01/2020.
- // Copyright © 2020 yarin ben baruch. All rights reserved.
- //
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define _CRT_NONSTDC_NO_DEPRECATE
- typedef char* verylong;
- verylong input_long(void);
- verylong add_verylong(verylong vl1, verylong vl2);
- verylong multiply_verylong(verylong vl1, verylong vl2);
- void main(void)
- {
- verylong a, b, c;
- do {
- printf("enter the first long integer: ");
- a = input_long();
- } while (!a);
- do {
- printf("enter the second long integer: ");
- b = input_long();
- } while (!b);
- c = add_verylong(a, b);
- printf("%s + %s = %s\n", a, b, c);
- c = multiply_verylong(a, b); printf("%s * %s = %s\n", a, b, c);
- free(c);
- free(a);
- free(b);
- }
- verylong input_long(void)
- {
- char tempstr[80];
- verylong longnum;
- int i = 0;
- longnum = (verylong)malloc((strlen(tempstr) + 1));
- gets(tempstr);
- while (tempstr[i] != '\0')
- {
- if (tempstr[i] < '0' || tempstr[i] > '9')
- {
- printf("Erorr,try again \n");
- return NULL;
- }
- i++;
- }
- strcpy(longnum, tempstr);
- return longnum;
- }
- verylong add_verylong(verylong vl1, verylong vl2)
- {
- int i, carry = 0;
- int a, b, num;
- int size;
- int S_vl1 = strlen(vl1);
- int S_vl2 = strlen(vl2);
- int size_arr = (S_vl2 >= S_vl1 ? S_vl2 : S_vl1) + 1;
- verylong sum_arr = (verylong)calloc(size_arr + 1, sizeof(char));
- sum_arr[size_arr] = '\0';
- size = size_arr - 1;
- for (i = 0; i < size; i++)
- {
- a = vl1[S_vl1 - 1] - '0';
- b = vl2[S_vl2 - 1] - '0';
- if (S_vl1 - 1 < 0)
- a = 0;
- if (S_vl2 - 1 < 0)
- b = 0;
- num = a + b + carry;
- carry = num <= 9 ? 0 : 1;
- sum_arr[size_arr - 1] = (num <= 9 ? num : num % 10) + '0';
- size_arr--;
- S_vl1--;
- S_vl2--;
- }
- if (carry == 1)
- sum_arr[0] = '1';
- else
- sum_arr++;
- return sum_arr;
- }
- verylong multiply_verylong(verylong vl1, verylong vl2)
- {
- int i = 0;
- int j = 0;
- int len1 = strlen(vl1);
- int len2 = strlen(vl2);
- int* result = (int*)calloc(len1 + len2, sizeof(int));
- int indexr1 = 0, indexr2 = 0;
- int carry;
- int n1;
- int n2;
- int sum;
- int z;
- for (i = len1 - 1; i >= 0; i--)
- {
- carry = 0;
- n1 = vl1[i] - '0';
- indexr2 = 0;
- for (j = len2 - 1; j >= 0; j--)
- {
- n2 = vl2[j] - '0';
- sum = n1 * n2 + result[indexr1 + indexr2] + carry;
- carry = sum / 10;
- result[indexr1 + indexr2] = sum % 10;
- indexr2++;
- }
- if (carry > 0)
- result[indexr1 + indexr2] += carry;
- indexr1++;
- }
- z = len1 + len2;
- while (z >= 0 && result[z - 1] == 0)
- z--;
- verylong longnum = (verylong)malloc(z + 1);
- if (z == 0) {
- longnum = (verylong)realloc(longnum, 2);
- longnum[0] = '0';
- longnum[1] = '\0';
- return longnum;
- }
- longnum[z] = '\0';
- z = z - 1;
- for (i = 0; z >= 0, longnum[i] != '\0'; i++, z--)
- {
- longnum[i] = result[z] + '0';
- }
- return longnum;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement