Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <cstring>
- #define N 25001
- using namespace std;
- typedef int Huge[N];
- void Nr_Huge(Huge X,int n) /// X <- n
- {
- int i=0;
- X[0]=0;
- if(n==0)
- X[0]=1,X[1]=0;
- else
- while(n)
- ++X[0],X[++i]=n%10,n/=10;
- }
- void Add(Huge A,Huge B) /// A <- A+B
- {
- int i,T=0;
- if(B[0]>A[0])
- {
- for(i=A[0]+1;i<=B[0];)
- A[i++]=0;
- A[0]=B[0];
- }
- else
- for(i=B[0]+1;i<=A[0];)
- B[i++]=0;
- for(i=1;i<=A[0];i++)
- A[i]+=B[i]+T,T=A[i]/10,A[i]%=10;
- if(T)
- A[++A[0]]=T;
- }
- void Mult(Huge H,short X) /// H <- H*X
- {
- short T=0;
- for(int i=1;i<=H[0];++i)
- H[i]=H[i]*X+T,T=H[i]/10,H[i]=H[i]%10;
- while(T) /// Cat timp exista transport
- H[++H[0]]=T%10,T/=10;
- }
- int Sgn(Huge H1,Huge H2) /// -1 daca H1<H2; 0 daca H1=H2 si 1 daca H1>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;
- }
- int main()
- {
- ifstream f("inequation.in");
- ofstream g("inequation.out");
- int t;
- f>>t;
- int n;
- short b;
- Huge y;
- char s[25001];
- int rez;
- while(t--)
- {
- f>>b;
- f>>n;
- f.get();
- f.get(s,25001);
- for(int i=1;i<=n;++i)
- y[n-i+1]=s[i-1]-'0';
- y[0]=n;
- Huge unu;
- Nr_Huge(unu,1);
- Mult(y,b-1); Add(y,unu);
- Huge BlaN;
- Nr_Huge(BlaN,1);
- int semn=Sgn(BlaN,y);
- rez=0;
- while(semn==-1||semn==0)
- Mult(BlaN,b),semn=Sgn(BlaN,y),++rez;
- g<<rez-1<<'\n';
- }
- f.close();
- g.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement