Advertisement
a53

counterase

a53
Feb 19th, 2022
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.87 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. short int Divide(short int *A) /// A <- A/X si intoarce A%X
  5. {
  6. short int R=0;
  7. for(short int i=A[0];i;--i,R%=2)
  8. R=R*10+A[i],A[i]=R/2;
  9. while(!A[A[0]]&&A[0]>1)
  10. --A[0];
  11. return R;
  12. }
  13.  
  14. void MultHuge(short int *A,short int *B) /// A <- A x B
  15. {
  16. short int C[1001];
  17. short int T=0;
  18. C[0]=A[0]+B[0];
  19. for(short int i=1;i<=C[0];++i)
  20. C[i]=0;
  21. --C[0];
  22. for(short int i=1;i<=A[0];++i)
  23. for(short int j=1;j<=B[0];++j)
  24. C[i+j-1]+=A[i]*B[j];
  25. for(short int i=1;i<=C[0];++i)
  26. T+=C[i],C[i]=T%10,T/=10;
  27. if(T)
  28. C[++C[0]]=T;
  29. for(short int i=0;i<=C[0];++i)
  30. A[i]=C[i];
  31. }
  32.  
  33. int main()
  34. {
  35. ios_base::sync_with_stdio(false);
  36. cin.tie(0);
  37. cout.tie(0);
  38. string str;
  39. cin>>str; /// citesc numarul
  40. short int n=str.length(),X[501];
  41. X[0]=0;
  42. for(short int i=n-1;i>=0;--i) /// pun numarul invers in vectorul X
  43. X[++X[0]]=str[i]-'0';
  44. unsigned long long int cnt1=0;
  45. while(X[0]>1) /// Cat timp mai am ce imparti impart la 2
  46. {
  47. short int r=Divide(X);
  48. if(r) /// numar resturile de 1
  49. ++cnt1;
  50. }
  51. if(X[0]==1) /// Caz perticular (X[1]!=0)
  52. if(X[1]>1)
  53. {
  54. while(X[1]>=1)
  55. {
  56. if(X[1]%2) /// adica restul e 1
  57. ++cnt1;
  58. X[1]/=2;
  59. }
  60. }
  61. X[0]=X[1]=1; /// acum calculez puterile lui 2 la cnt1
  62. short int A[2000];
  63. A[0]=1,A[1]=2;
  64. while(cnt1) /// Calculez 2^cnt1 (exponentiere logaritmica)
  65. {
  66. if(cnt1%2)
  67. MultHuge(X,A); /// X <- X*A (Initial A e 2)
  68. MultHuge(A,A); /// A <- AxA
  69. cnt1/=2;
  70. }
  71. for(short int i=X[0];i>=1;--i)
  72. cout<<X[i];
  73. cout<<'\n';
  74. return 0;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement