Cod sursa(job #3367016)

Utilizator VladGtjGatej Vlad VladGtj Data 5 octombrie 2026 18:30:40
Problema Next Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.65 kb
#include <iostream>
#include <fstream>
using namespace std;
char a[100000001];
char b[100000001];
bool nrEgal=false;
ifstream fin("next.in");
ofstream fout("next.out");
void impartire(char v1[],char v2[],long long divizor,int na,int &nb){
    long long nrimpartire=0;
    int v2Index=1;
    for(int i=1;i<=na;i++){
        nrimpartire=nrimpartire*10+(v1[i]-'0');
        if(nrimpartire/divizor!=0){
            v2[v2Index]=nrimpartire/divizor+'0';
            nrimpartire=nrimpartire%divizor;
            v2Index++;
            nb++;
        }
        else if(v2Index!=1){
            v2[v2Index]='0';
            v2Index++;
            nb++;
        }
        if(nrimpartire==0){
            nrEgal=true;
        }
    }
}
void inmultire(char a[],int& na,long long b) {
  long long t, i;
  t=0;
  i=1;
  while (i<=na||t>0) {
    if(a[i]!=0){
        t+=b*(a[i]-48);
    }
    a[i]=t%10+48;
    t/=10;
    i++;
  }

  if (i-1 > na)
    na = i-1;
}
int main()
{

    string number;
    int nrcif=1,na=0,nb=0;
    long long divizor;
    fin>>number;
    fin>>divizor;
    for(char ch : number){
        a[nrcif]=ch;
        nrcif++;
    }
    nrcif--;
    impartire(a,b,divizor,nrcif,nb);
    if(!nrEgal){
        if(b[nb]!='9'){
            b[nb]++;
        }else{
            for(int i=nb;b[i]=='9';i--){
                b[i]='0';
                if(b[i-1]!='0'){
                    b[i-1]++;
                }
            }
        }
    }
    for(int i=1;i<=nb/2;i++){
        swap(b[i],b[nb-i+1]);
    }
    inmultire(b,nb,divizor);
    for(int i=nb;i>=1;i--){
        fout<<b[i];
    }
    return 0;
}