Advertisement
Guest User

Untitled

a guest
Nov 19th, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.71 KB | None | 0 0
  1. // uloha10.c -- Adam Benovič, 14.11.2017 09:41
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5.  
  6. int strToInt(char c){
  7.   if(c == 0)
  8.     return 0;
  9.   else
  10.    return c - '0';
  11. }
  12.  
  13. char intToStr(int c){
  14.   if(c == 0)
  15.     return '0';
  16.   else
  17.     return c + '0';
  18. }
  19.  
  20. int bigger(int a, int b){
  21.   return a > b ? a : b;
  22. }
  23.  
  24. char *zapisVysledok(char *vysledok, char *temp){
  25.   int i, j = strlen(temp) - 1;
  26.   for(i = 0; i < strlen(temp); i++, j--)
  27.     vysledok[i] = temp[j];
  28.   vysledok[i] = 0;
  29.   return vysledok;
  30. }
  31.  
  32.  
  33. char *plus(char *cislo, char *vysledok){
  34.   int flag = 0;
  35.   if (strlen(cislo) > strlen(vysledok)){
  36.     char *temp = vysledok;
  37.     vysledok = cislo;
  38.     cislo = temp;
  39.     flag = 1;
  40.   }
  41.  
  42.   int cislolen = strlen(cislo), vysledoklen = strlen(vysledok), rozdiel = vysledoklen - cislolen;
  43.   char *temp = (char*)calloc(vysledoklen + 1, sizeof(char));  
  44.   int zvysok = 0, sucet, i, j = 0;
  45.  
  46.   for (i = cislolen - 1; i >= 0; i--, j++){
  47.     sucet = strToInt(cislo[i]) + strToInt(vysledok[i+rozdiel]) + zvysok;
  48.     temp[j] = intToStr(sucet % 10);
  49.     zvysok = sucet / 10;
  50.   }
  51.  
  52.   for (i = rozdiel - 1; i >= 0; i--, j++){
  53.     sucet = strToInt(vysledok[i]) + zvysok;
  54.     temp[j] = intToStr(sucet % 10);
  55.     zvysok = sucet / 10;
  56.   }
  57.  
  58.   if (zvysok)
  59.     temp[j] = intToStr(zvysok);
  60.  
  61.   if(flag){
  62.     char *temp = vysledok;
  63.     vysledok = cislo;
  64.     cislo = temp;
  65.   }
  66.  
  67.   return zapisVysledok(vysledok, temp);
  68. }
  69.  
  70. char *krat(char *cislo, char *vysledok){
  71.   int i, j, cislolen = strlen(cislo), vysledoklen = strlen(vysledok), zvysok;
  72.   int n1, n2, i_n1 = 0, i_n2 = 0, sucet;
  73.  
  74.   char *temp = (char*)calloc(bigger(cislolen, vysledoklen) * 2, sizeof(char));
  75.  
  76.   for (i = cislolen - 1; i >= 0; i--){
  77.     zvysok = 0;
  78.     n1 = strToInt(cislo[i]);
  79.     i_n2 = 0;
  80.  
  81.    
  82.  
  83.     for (j = vysledoklen - 1; j >= 0; j--){
  84.       n2 = strToInt(vysledok[j]);
  85.       sucet = n1 * n2 + strToInt(temp[i_n1 + i_n2]) + zvysok;
  86.       zvysok = sucet / 10;
  87.       temp[i_n1 + i_n2] = intToStr(sucet % 10);
  88.       i_n2++;
  89.     }
  90.  
  91.     if (zvysok > 0)
  92.       temp[i_n1 + i_n2] += intToStr(zvysok);
  93.    
  94.     i_n1++;
  95.   }
  96.  
  97.   return zapisVysledok(&vysledok[0], &temp[0]);
  98. }
  99.  
  100. int main()
  101. {
  102.   // sem napis svoje riesenie
  103.   char *znamienko = (char*) calloc(4, sizeof(char));
  104.   char *cislo = (char*) calloc(1000, sizeof(char));
  105.   char *vysledok = (char*) calloc(1000, sizeof(char));
  106.   vysledok[0] = '0';
  107.  
  108.   while(scanf("%s %s\n", znamienko, cislo) == 2){
  109.     if(strcmp(znamienko, "plus") == 0)
  110.       vysledok = plus(&cislo[0], &vysledok[0]);
  111.        
  112.    else if(strcmp(znamienko, "krat") == 0)
  113.       vysledok = krat(&cislo[0], &vysledok[0]);
  114.  
  115.     printf("%s\n", vysledok);
  116.   }
  117.  
  118.   return 0;
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement