Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int main() {
- char *num1, *num2, *result;
- int carry = 0;
- num1 = (char*)malloc(100000000 * sizeof(char));
- num2 = (char*)malloc(100000000 * sizeof(char));
- result = (char*)malloc(200000001 * sizeof(char));
- if (num1 == NULL || num2 == NULL || result == NULL) {
- printf("Alocação falhou\n");
- return 1;
- }
- printf("Digite o primeiro número: ");
- scanf(" %[^\n]s", num1);
- printf("Digite o segundo número: ");
- scanf(" %[^\n]s", num2);
- int len1 = strlen(num1);
- int len2 = strlen(num2);
- // numero com todos os zeros
- for (int i = 0; i < len1 + len2; i++) {
- result[i] = '0';
- }
- result[len1 + len2] = '\0';
- for (int i = len1 - 1; i >= 0; i--) {
- int num1Digit = num1[i] - '0';
- carry = 0;
- for (int j = len2 - 1; j >= 0; j--) {
- int num2Digit = num2[j] - '0';
- int product = (result[i + j + 1] - '0') + (num1Digit * num2Digit) + carry; //onde ele vê o valor daquela casa decimal
- carry = product / 10;
- result[i + j + 1] = (product % 10) + '0';
- }
- result[i] += carry;
- }
- // promeiro numero não-zero
- int start = 0;
- while (result[start] == '0' && result[start + 1] != '\0') {
- start++;
- }
- printf("\nResult: %s\n", result + start);
- free(num1);
- free(num2);
- free(result);
- return 0;
- }
Add Comment
Please, Sign In to add comment