Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <cstring>
- using namespace std;
- #define NMax 100000
- typedef int Huge[NMax+3];
- int b; /// baza
- int Mod(Huge A,int X) /// Intoarce A%X
- {
- int R=0;
- for(int i=A[0];i;--i)
- R=(b*R+A[i])%X; /// b*R este restul anterior inmultit cu baza
- return R;
- }
- int main()
- {
- char s[100001];
- ifstream f("cifrab.in");
- ofstream g("cifrab.out");
- f.getline(s,100001);
- int L=strlen(s);
- Huge N;
- N[0]=L;
- for(int i=L-1;i>=0;--i) /// Aflu baza b si formez numarul in baza b
- {
- if(isdigit(s[i]))
- N[L-i]=s[i]-'0';
- else
- N[L-i]=s[i]-'A'+10;
- if(N[L-i]>b) /// Aflam cifra maxima si o memoram in b
- b=N[L-i];
- }
- /// Un numar natural scris in baza b se divide cu b–1 daca si numai daca suma cifrelor sale este un numar multiplu de b-1
- int sumcif=0;
- for(int i=L-1;i>=0;--i) /// Calculam restul impartirii sumei tuturor cifrelor lui N la baza-1 (adica b)
- {
- if(isdigit(s[i]))
- N[L-i]=s[i]-'0';
- else
- N[L-i]=s[i]-'A'+10;
- sumcif+=N[L-i];
- if(sumcif>=b)
- sumcif-=b;
- }
- ++b; /// baza va fi mai mare cu 1 fata de cifra maxima
- int sol=Mod(N,b-1);
- g<<b<<'\n';
- if(sumcif==0)
- {
- if(b<=10)
- g<<b-1;
- else
- g<<(char)('A'-10+b-1);
- return 0;
- }
- if(b<=10)
- g<<sol;
- else
- if(sol>=10)
- g<<(char)('A'-10+sol);
- else
- g<<sol;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement