Guest User

Untitled

a guest
Jan 16th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.51 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <deque>
  4.  
  5. using namespace std;
  6.  
  7. deque<int> addDeques(deque<int>& num1, deque<int>& num2);
  8.  
  9. int main()
  10. {
  11. deque<int> number1;
  12. deque<int> number2;
  13. deque<int> out;
  14.  
  15. int n = 0;
  16. int parentSize = 0;
  17. int outSize = 0;
  18.  
  19. //first 2 values of Fibonacci series..
  20. number1.push_back(0);
  21. number2.push_back(1);
  22.  
  23.  
  24. //cout << "Enter Fibonacci (n): " <<endl;
  25. cin >> n;
  26.  
  27.  
  28. vector<deque<int>> parent;
  29. parentSize = n+1;
  30. parent.push_back(number1);
  31. if(parentSize > 1){
  32. parent.push_back(number2);
  33. }
  34.  
  35.  
  36. for(int i=2; i < parentSize; i++){
  37. out = addDeques(parent[i-1], parent[i-2]);
  38. parent.push_back(out);
  39. }
  40.  
  41. deque<int> output = parent.back();
  42. outSize = output.size();
  43. //cout << "Output Size: " << outSize << " digits." <<endl<<endl;
  44. //cout << "RESULT: "<< endl;
  45. int last_digit = 0;
  46.  
  47. last_digit = output.back();
  48. //De-Parse the solution
  49. //for(int j=0; j < outSize; j++){
  50.  
  51. //cout <<output.at(j);
  52. //last_digit = output.at(j);
  53. // }
  54. cout << last_digit;
  55. cout << endl;
  56. return 0;
  57. }
  58.  
  59. deque<int> addDeques(deque<int>& num1, deque<int>& num2){
  60. int d_size = 0;
  61. int num1_size = num1.size();
  62. int num2_size = num2.size();
  63. int remainder = 0;
  64. deque<int> result;
  65.  
  66.  
  67. if(num1_size > num2_size){
  68. d_size = num1_size;
  69. //adjust the size of both numbers by adding zeros at the beginning
  70. for(int j=0; j < (num1_size - num2_size); j++){
  71. num2.push_front(0);
  72. }
  73. }else if(num1_size == num2_size){
  74. d_size = num1_size;
  75.  
  76. }else{
  77. d_size = num2_size;
  78. //adjust the size of both numbers by adding zeros at the beginning
  79. for(int k=0; k < (num2_size - num1_size); k++){
  80. num1.push_front(0);
  81. }
  82. }
  83.  
  84. for(int i=d_size; i > 0; i--){
  85. //Get the mirrored index
  86. int index = i-1;
  87. int first_num = num1.at(index);
  88. int second_num = num2.at(index);
  89. int temp_sum = 0;
  90.  
  91.  
  92. //Split 2 digits number ..
  93. if((first_num + second_num + remainder) > 9){
  94. temp_sum = (first_num + second_num + remainder) % 10;
  95. result.push_front(temp_sum);
  96.  
  97. remainder = (first_num + second_num + remainder) / 10;
  98. }else{
  99. result.push_front(first_num + second_num + remainder);
  100. remainder = 0;
  101. }
  102. }
  103. //in case of overflow..
  104. if(remainder > 0){
  105. result.push_front(remainder);
  106. }
  107. return result;
  108. }
Add Comment
Please, Sign In to add comment