Advertisement
Guest User

Untitled

a guest
Nov 20th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.53 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. unsigned long long n, b, r, r1=0, i, t;
  6. typedef unsigned long long NrMare[100001];
  7.  
  8. NrMare x, y;
  9.  
  10. int main()
  11. {
  12. cin>>n>>b>>r;
  13. x[0]=n, x[n]=1; // la nr mari se lucreaza rasturnat deci am pus ultima cifra 1, restul au ramas 0
  14. for(i=x[0];i>0;i--) // aici am calculat restul numarului
  15. {
  16. r1=r1*10+x[i];
  17. r1%=b;
  18. }
  19. if(r>=r1) // cazul in care restul cerut este mai mare sau egal ca restul numarului format din n cifre adica x
  20. {
  21. r1=r-r1;
  22. while(r1) // salvez valoarea restului intr-un alt numar mare
  23. {
  24. y[++y[0]]=r1%10;
  25. r1/=10;
  26. }
  27. if(x[0]<y[0]) x[0]=y[0];
  28. for(i=1;i<=x[0];i++,t/=10) // adunarea numerelor mari
  29. {
  30. t=x[i]+y[i]+t;
  31. x[i]=t%10;
  32. }
  33. if(t) x[++x[0]]=t;
  34. }
  35. else // celalalt caz - exact aceeasi chestie, doar r1 se modifica
  36. {
  37. r1=b+r-r1;
  38. while(r1)
  39. {
  40. y[++y[0]]=r1%10;
  41. r1/=10;
  42. }
  43. if(x[0]<y[0]) x[0]=y[0];
  44. for(i=1;i<=x[0];i++,t/=10)
  45. {
  46. t=x[i]+y[i]+t;
  47. x[i]=t%10;
  48. }
  49. if(t) x[++x[0]]=t;
  50. }
  51. for(i=x[0];i>0;i--) // verific daca numarul determinat respecta conditia ceruta (*)
  52. {
  53. r1=r1*10+x[i];
  54. r1%=b;
  55. }
  56. if(r1==r) // (*) o respecta deci afisez numarul
  57. for(i=x[0];i>0;i--) cout<<x[i];
  58. else
  59. cout<<-1; // nu o respecta
  60. return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement