a53

numere20_CU-FOR

a53
Oct 16th, 2017
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.92 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cstring>
  4. using namespace std;
  5. typedef int NrMare[1010];
  6. NrMare n,i,unu,aux,nr;
  7. int u,v;
  8. char numar[101];
  9. void AtribMic(NrMare x, int n)
  10. {
  11. x[0]=0;
  12. if(n==0)
  13. x[(x[0]=1)]=0;
  14. else
  15. for(;n;n/=10)
  16. x[++x[0]]=n%10;
  17. }
  18.  
  19. void AtribMare(NrMare Dest, NrMare Sursa)
  20. {
  21. int i;
  22. for(i=0;i<=Sursa[0];i++)
  23. Dest[i]=Sursa[i];
  24. }
  25.  
  26. int Compara(NrMare H1,NrMare H2) {
  27. // Elimina zero-urile semnificative, daca exista.
  28. while (H1[0] && !H1[H1[0]]) H1[0]--;
  29. while (H2[0] && !H2[H2[0]]) H2[0]--;
  30.  
  31. if (H1[0] < H2[0]) {
  32. return -1;
  33. } else if (H1[0] > H2[0]) {
  34. return +1;
  35. }
  36.  
  37. for (int i = H1[0]; i > 0; --i) {
  38. if (H1[i] < H2[i]) {
  39. return -1;
  40. } else if (H1[i] > H2[i]) {
  41. return +1;
  42. }
  43. }
  44. return 0;
  45. }
  46.  
  47. void Adunare(NrMare x,NrMare y)
  48. // x = x + y
  49. {
  50. int i,t=0;
  51. if(x[0]<y[0])
  52. x[0]=y[0];
  53. for(i=1;i<=x[0];i++,t/=10)
  54. {
  55. t=x[i]+y[i]+t;
  56. x[i]=t%10;
  57. // echivalent x[i]=(t+=x[i]+y[i])%10
  58. }
  59. if(t)
  60. x[++x[0]]=t;
  61. }
  62.  
  63. int Divide(NrMare x, int n)
  64. //x = x /n, returneaza x%n
  65. {
  66. int i,r=0;
  67. for(i=x[0];i>0;i--)
  68. {
  69. r=10*r+x[i];
  70. x[i]=r/n;
  71. r%=n;
  72. }
  73. for(;x[x[0]]==0 && x[0]>1;)
  74. x[0]--;
  75. return r;
  76. }
  77. ofstream g("numere20.out");
  78. void Afisare(NrMare n)
  79. {
  80.  
  81. for(int i=n[0];i>0;--i)
  82. g<<n[i];
  83. g<<'\n';
  84. }
  85.  
  86. int main ()
  87. {
  88. ifstream f("numere20.in");
  89. f>>numar;
  90. n[0]=strlen(numar);
  91. for(int k=0;k<n[0];++k)
  92. n[n[0]-k]=numar[k]-'0';
  93. f>>u>>v;
  94. f.close();
  95. unu[0]=1;unu[1]=1;
  96. i[0]=1;i[1]=1;
  97. nr[0]=1;nr[1]=0;
  98. int bu=0,bv=0;
  99. while(Compara(i,n)!=1)
  100. {
  101. AtribMare(aux,i);
  102. bu=Divide(aux,u);
  103. AtribMare(aux,i);
  104. bv=Divide(aux,v);
  105. if(bu!=0&&bv!=0)
  106. Adunare(nr,unu);
  107. Adunare(i,unu);
  108. }
  109. Afisare(nr);
  110. g.close();
  111. return 0;
  112. }
Advertisement
Add Comment
Please, Sign In to add comment