Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <cstring>
- using namespace std;
- ifstream f("baza.in");
- ofstream g("baza.out");
- char cuv[51];
- typedef int NrMare[1010];
- NrMare p,nr;
- 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 Adunare(NrMare x,NrMare y) /// x = x + y
- {
- if(y[0]==1&&y[1]==0)
- return;
- int t=0;
- if(x[0]<y[0])
- x[0]=y[0];
- for(int 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;
- }
- void ProdusMic(NrMare x,int n) ///x <- x*n
- {
- int t=0;
- if(x[0]==1&&x[1]==0)
- return;
- for(int i=1;i<=x[0];++i,t/=10)
- t+=x[i]*n,x[i]=t%10;
- for(;t;t/=10)
- x[++x[0]]=t%10;
- }
- void ProdusMare(NrMare x,NrMare y) ///x = x * y
- {
- int i,j,t=0;
- if(x[0]==1&&x[1]==0)
- return;
- NrMare z; /// Stabilesc lungimea rezultatului. S-ar putea modifica
- z[0]=x[0]+y[0]-1; /// Initializez vectorul z
- for(i=1;i<=x[0]+y[0];++i)
- z[i]=0;
- for(i=1;i<=x[0];++i) /// Calculez produsele intermediare, impreuna cu suma intermediara
- for(j=1;j<=y[0];++j)
- z[i+j-1]+=x[i]*y[j];
- for(i=1;i<=z[0];++i) /// Corectez sumele intermediare
- t+=z[i],z[i]=t%10,t/=10;
- if(t) /// Verific daca trebuie modificata lungimea rezultatului (cand avem transfer)
- z[++z[0]]=t;
- for(i=0;i<=z[0];++i) /// Pun rezultatul in x
- x[i]=z[i];
- }
- void AfisareMare(NrMare x)
- {
- for(int i=x[0];i>=1;--i)
- g<<x[i];
- }
- int main()
- {
- f>>cuv;
- int L=strlen(cuv);
- p[0]=1;p[1]=1; /// Initializam p=1
- nr[0]=1;nr[1]=0;
- NrMare x;
- for(int i=L-1;i>=0;--i)
- {
- AtribMic(x,cuv[i]-'a');
- ProdusMare(x,p);
- Adunare(nr,x);
- ProdusMic(p,26);
- }
- AfisareMare(nr);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement