Advertisement
Infernale

NCTU LAB 07/05 NUM 2

May 7th, 2019
452
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.30 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5.  
  6. #define MAX 20
  7.  
  8. void reverseCopy(char *from, char *to){
  9.     int length = strlen(from);
  10.     for(int i=0;i<length;i++){
  11.         to[i] = from[length-i-1];
  12.     }
  13.     to[length]='\0';
  14. }
  15.  
  16. void mult(char *first, char *sec, char *result){
  17.     char F[MAX],S[MAX],temp[MAX];
  18.     int i, j, r, t_len, carry, res;
  19.     int f_len = strlen(first);
  20.     int s_len = strlen(sec);
  21.     reverseCopy(first,F);
  22.     reverseCopy(sec,S);
  23.     t_len = f_len+s_len;
  24.     r = -1;
  25.     for(i=0;i<=t_len;i++){
  26.         temp[i] = '0';
  27.     }
  28.     temp[i]='\0';
  29.     for(j=0;j<s_len;j++){
  30.             carry = 0;
  31.             for(i=0;i<f_len;i++){
  32.                 res = (F[i]-'0') * (S[j] - '0') + carry + (temp[i+j] - '0');
  33.                 temp[i+j] = res%10 + '0';
  34.                 carry = res/10;
  35.                 if(i+j > r){
  36.                     r = i + j;
  37.                 }
  38.             }
  39.             while(carry!=0){
  40.                 res = carry + temp[i+j] - '0';
  41.                 carry = res/10;
  42.                 temp[i+j] = res%10 + '0';
  43.                 if(i+j > r){
  44.                     r = i + j;
  45.                 }
  46.                 i++;
  47.             }
  48.         }
  49.         for(;r>0 && temp[r]=='0';r--);
  50.         temp[r+1]='\0';
  51.         reverseCopy(temp,result);
  52. }
  53.    
  54. int main(){
  55.     char first[MAX], second[MAX], res[MAX];
  56.     while(scanf("%s%s", &first, &second)){
  57.         mult(first, second, res);
  58.         int len = strlen(res);
  59.         printf("Result : ");
  60.         for(int i=0;i<len;i++){
  61.             printf("%c", res[i]);
  62.         }
  63.         printf("\n");
  64. }
  65. return 0;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement