that_one_nigga_you_k

multiplicação de strings

Nov 8th, 2023 (edited)
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.48 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main() {
  6.     char *num1, *num2, *result;
  7.     int carry = 0;
  8.  
  9.     num1 = (char*)malloc(100000000 * sizeof(char));
  10.     num2 = (char*)malloc(100000000 * sizeof(char));
  11.     result = (char*)malloc(200000001 * sizeof(char));
  12.  
  13.     if (num1 == NULL || num2 == NULL || result == NULL) {
  14.         printf("Alocação falhou\n");
  15.         return 1;
  16.     }
  17.  
  18.     printf("Digite o primeiro número: ");
  19.     scanf(" %[^\n]s", num1);
  20.     printf("Digite o segundo número: ");
  21.     scanf(" %[^\n]s", num2);
  22.  
  23.     int len1 = strlen(num1);
  24.     int len2 = strlen(num2);
  25.  
  26.     // numero com todos os zeros
  27.     for (int i = 0; i < len1 + len2; i++) {
  28.         result[i] = '0';
  29.     }
  30.     result[len1 + len2] = '\0';
  31.  
  32.     for (int i = len1 - 1; i >= 0; i--) {
  33.         int num1Digit = num1[i] - '0';
  34.         carry = 0;
  35.  
  36.         for (int j = len2 - 1; j >= 0; j--) {
  37.             int num2Digit = num2[j] - '0';
  38.             int product = (result[i + j + 1] - '0') + (num1Digit * num2Digit) + carry; //onde ele vê o valor daquela casa decimal
  39.             carry = product / 10;
  40.             result[i + j + 1] = (product % 10) + '0';
  41.         }
  42.  
  43.         result[i] += carry;
  44.     }
  45.  
  46.     // promeiro numero não-zero
  47.     int start = 0;
  48.     while (result[start] == '0' && result[start + 1] != '\0') {
  49.         start++;
  50.     }
  51.  
  52.     printf("\nResult: %s\n", result + start);
  53.  
  54.     free(num1);
  55.     free(num2);
  56.     free(result);
  57.  
  58.     return 0;
  59. }
  60.  
Add Comment
Please, Sign In to add comment