Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- void soma(char *num, char *nam, char *result){
- int loopMax, loopMin;
- int carry = 0;
- int len1 = strlen(num);
- int len2 = strlen(nam);
- loopMax = (len1 > len2) ? len1 : len2;
- loopMin = (len1 > len2) ? len2 : len1;
- for(int i = 0; i < loopMax; i++){
- int digit1 = (i < len1) ? num[len1 - i - 1] - '0' : 0;
- int digit2 = (i < len2) ? nam[len2 - i - 1] - '0' : 0;
- int sum = digit1 + digit2 + carry;
- carry = sum/10;
- result[i] = (sum%10) + '0';
- }
- if (carry > 0) {
- result[loopMax] = carry + '0'; // quando a soma de uma casa é maior que 10
- result[loopMax + 1] = '\0'; // o fim da string
- } else {
- result[loopMax] = '\0'; // fim da string quando a soma não é maior q 10
- }
- // Reverse the result
- int resultLen = strlen(result);
- for (int i = 0, j = resultLen - 1; i < j; i++, j--) {
- char temp = result[i];
- result[i] = result[j];
- result[j] = temp;
- }
- printf("\nResult: %s\n", result);
- }
- void multiplica(char *num1, char *num2, char *result){
- int len1 = strlen(num1);
- int len2 = strlen(num2);
- int carry;
- // 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);
- }
- 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 opc;
- printf("-------1 para soma-------\n------2 para multiplicar------\n");
- scanf("%d", &opc);
- if(opc == 1){
- soma(num1, num2, result);
- }
- else{
- multiplica(num1, num2, result);
- }
- free(num1);
- free(num2);
- free(result);
- return(0);
- }
Add Comment
Please, Sign In to add comment