fork(2) download
  1. #include <iostream>
  2. #include <math.h>
  3. typedef unsigned long long licznik;
  4. using namespace std;
  5. const licznik T_size = 10000;
  6.  
  7. void opt (char *wsk, licznik size)
  8. {
  9. --size;
  10. for(long long int q=size; q>=0; --q)
  11. {
  12. if(*(wsk+q)>=10) // takie pro modulo
  13. {
  14. licznik tmp = *(wsk+q)/10;
  15. *(wsk+q-1)+=tmp;
  16. *(wsk+q) = (*(wsk+q)-10*tmp);
  17. }
  18. }
  19. }
  20.  
  21. void mnozenie (const licznik a, const licznik b) // mnożenie dwoch liczb unsigned long long int
  22. {
  23.  
  24. bool *wynik = new bool[T_size];
  25. char *wsk = (char *) wynik;
  26. licznik i = T_size-1, j=i;
  27.  
  28. for(register licznik B=b; B>0; B/=10, --j)
  29. {
  30. for(register licznik A=a, i=j; A>0; A/=10, --i)
  31. *(wsk+i)+= (A%10 * B%10);
  32. opt(wsk, T_size);
  33.  
  34. }
  35.  
  36. i = 0; // wypisywanie wyniku
  37. while( *(wsk+ ++i)==0 );
  38. while(i!=T_size)
  39. cout << *(wynik+i++);
  40.  
  41.  
  42. cout << endl;
  43. return;
  44. }
  45.  
  46.  
  47.  
  48.  
  49.  
  50. int main()
  51. {
  52. licznik a, b;
  53. cin>>a>>b;
  54. cout<<"Poprawny wynik mnożenia: ";
  55. mnozenie(a, b);
  56. long double wynik=(long double)a*(long double)b;
  57. cout<<"Wynik mnożenie zapisany w long double: "<<wynik<<endl;
  58.  
  59. return 0;
  60. }
  61.  
Success #stdin #stdout 0s 3484KB
stdin
1999999999
1234567899
stdout
Poprawny wynik mnożenia: 2331961588013717421
Wynik mnożenie zapisany w long double: 2.46914e+18