Advertisement
Guest User

Untitled

a guest
Feb 18th, 2019
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.51 KB | None | 0 0
  1. void BigInt_sudetiSkaicius (BigInt *demuo1, const BigInt *demuo2) {
  2. int sumosZenklas = 0;
  3. if (demuo1->zenklas == 1 && demuo2->zenklas == 1) {
  4. sumosZenklas = 1;
  5. } else if (demuo1->zenklas == 1 && demuo2->zenklas == 0) {
  6. sumosZenklas = 1;
  7. BigInt_atimtiSkaicius(demuo1, demuo2);
  8. return;
  9. } else if (demuo1->zenklas == 0 && demuo2->zenklas == 1) {
  10. sumosZenklas = 0;
  11. BigInt_atimtiSkaicius(demuo1, demuo2);
  12. return;
  13. }
  14.  
  15. BigInt *suma = malloc(sizeof(BigInt));
  16. BigInt *didesnisSkaicius = malloc(sizeof(BigInt));
  17. BigInt *mazesnisSkaicius = malloc(sizeof(BigInt));
  18.  
  19. if (BigInt_palygintiSkaicius(demuo1, demuo2) == 1) {
  20. didesnisSkaicius->skaicius = malloc(sizeof(char)*demuo2->ilgis);
  21. BigInt_kopijuotiSkaiciu(didesnisSkaicius, demuo2);
  22. mazesnisSkaicius->skaicius = malloc(sizeof(char)*demuo1->ilgis);
  23. BigInt_kopijuotiSkaiciu(mazesnisSkaicius, demuo1);
  24. suma->skaicius = calloc(demuo2->ilgis+1, sizeof(char));
  25. suma->ilgis = demuo2->ilgis+1;
  26. } else {
  27. didesnisSkaicius->skaicius = malloc(sizeof(char)*demuo1->ilgis);
  28. BigInt_kopijuotiSkaiciu(didesnisSkaicius, demuo1);
  29. mazesnisSkaicius->skaicius = malloc(sizeof(char)*demuo2->ilgis);
  30. BigInt_kopijuotiSkaiciu(mazesnisSkaicius, demuo2);
  31. suma->skaicius = calloc(demuo1->ilgis+1, sizeof(char));
  32. suma->ilgis = demuo1->ilgis+1;
  33. }
  34.  
  35. int pernesimas = 0;
  36.  
  37. int indeksasDS = didesnisSkaicius->ilgis-1;
  38. int indeksasMS = mazesnisSkaicius->ilgis-1;
  39.  
  40. BigInt_isvestiSkaiciu(suma);
  41. for (int i = suma->ilgis-1; i >= 0; i--) {
  42. if (pernesimas == 1) {
  43. suma->skaicius[i] += 1;
  44. pernesimas = 0;
  45. }
  46. if (indeksasDS >= 0 && indeksasMS >= 0) {
  47. suma->skaicius[i] += didesnisSkaicius->skaicius[indeksasDS] + mazesnisSkaicius->skaicius[indeksasMS];
  48. } else if (indeksasDS >= 0) {
  49. suma->skaicius[i] += didesnisSkaicius->skaicius[indeksasDS];
  50. }
  51. if (suma->skaicius[i] > 9) {
  52. pernesimas = 1;
  53. suma->skaicius[i] %= 10;
  54. }
  55. indeksasDS--;
  56. indeksasMS--;
  57. }
  58.  
  59. BigInt_sunaikintiSkaiciu(&didesnisSkaicius);
  60. BigInt_sunaikintiSkaiciu(&mazesnisSkaicius);
  61. demuo1->skaicius = realloc(demuo1->skaicius, suma->ilgis*sizeof(char));
  62. BigInt_kopijuotiSkaiciu(demuo1, suma);
  63. BigInt_sunaikintiSkaiciu(&suma);
  64. BigInt_pastumtiSkaiciu(&demuo1);
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement