Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <cstring>
- using namespace std;
- typedef int NrMare[1010];
- NrMare n,i,unu,aux,nr;
- int u,v;
- char numar[101];
- void AtribMic(NrMare x, int n)
- {
- x[0]=0;
- if(n==0)
- x[(x[0]=1)]=0;
- else
- for(;n;n/=10)
- x[++x[0]]=n%10;
- }
- void AtribMare(NrMare Dest, NrMare Sursa)
- {
- int i;
- for(i=0;i<=Sursa[0];i++)
- Dest[i]=Sursa[i];
- }
- int Compara(NrMare H1,NrMare H2) {
- // Elimina zero-urile semnificative, daca exista.
- while (H1[0] && !H1[H1[0]]) H1[0]--;
- while (H2[0] && !H2[H2[0]]) H2[0]--;
- if (H1[0] < H2[0]) {
- return -1;
- } else if (H1[0] > H2[0]) {
- return +1;
- }
- for (int i = H1[0]; i > 0; --i) {
- if (H1[i] < H2[i]) {
- return -1;
- } else if (H1[i] > H2[i]) {
- return +1;
- }
- }
- return 0;
- }
- void Adunare(NrMare x,NrMare y)
- // x = x + y
- {
- int i,t=0;
- if(x[0]<y[0])
- x[0]=y[0];
- for(i=1;i<=x[0];i++,t/=10)
- {
- t=x[i]+y[i]+t;
- x[i]=t%10;
- // echivalent x[i]=(t+=x[i]+y[i])%10
- }
- if(t)
- x[++x[0]]=t;
- }
- int Divide(NrMare x, int n)
- //x = x /n, returneaza x%n
- {
- int i,r=0;
- for(i=x[0];i>0;i--)
- {
- r=10*r+x[i];
- x[i]=r/n;
- r%=n;
- }
- for(;x[x[0]]==0 && x[0]>1;)
- x[0]--;
- return r;
- }
- ofstream g("numere20.out");
- void Afisare(NrMare n)
- {
- for(int i=n[0];i>0;--i)
- g<<n[i];
- g<<'\n';
- }
- int main ()
- {
- ifstream f("numere20.in");
- f>>numar;
- n[0]=strlen(numar);
- for(int k=0;k<n[0];++k)
- n[n[0]-k]=numar[k]-'0';
- f>>u>>v;
- f.close();
- unu[0]=1;unu[1]=1;
- i[0]=1;i[1]=1;
- nr[0]=1;nr[1]=0;
- int bu=0,bv=0;
- while(Compara(i,n)!=1)
- {
- AtribMare(aux,i);
- bu=Divide(aux,u);
- AtribMare(aux,i);
- bv=Divide(aux,v);
- if(bu!=0&&bv!=0)
- Adunare(nr,unu);
- Adunare(i,unu);
- }
- Afisare(nr);
- g.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment