Pagini recente » Cod sursa (job #440892) | Cod sursa (job #2976667) | Cod sursa (job #2849297) | Cod sursa (job #2714453) | Cod sursa (job #2770028)
/*#include <fstream>
#include <algorithm>
#include <cstring>
using namespace std;
ifstream fin("next.in");
ofstream fout("next.out");
const int MAXDIGITS = 1000005;
const int BASE = 10;
char s[MAXDIGITS];
class HUGE
{
private:
int x[MAXDIGITS];
public:
void print()
{
for(int i=x[0]; i>0; i--)
fout << x[i];
fout << '\n';
}
void set_char(char s[MAXDIGITS])
{
memset(x, 0, sizeof(x));
x[0] = strlen(s);
int n = strlen(s)-1;
for(int i = 1; i <= x[0]; i++)
{
x[i] = s[n]-'0';
n--;
}
}
// Supraincarcarea operatorilor aritmetici
HUGE operator += (long long a);
long long operator % (int k);
};
HUGE HUGE::operator += (long long a)
{
// x = x + other.x;
int i, tr, aux;
for(i=1, tr=0; i<=x[0]; i++)
{
aux = x[i] + a % 10 + tr;
x[i] = aux % BASE;
tr = aux / BASE;
a/=10;
}
if(tr)
x[++x[0]] = tr;
return (*this);
}
long long HUGE::operator % (int k)
{
int i, r=0;
for (i=x[0]; i>=1; i--)
{
r = r * 10 + x[i];
r = r % k;
}
return r;
}
HUGE a;
int main()
{
ios_base::sync_with_stdio(0);
fin.tie(0);
long long d, r, aux;
fin >> s >> d;
a.set_char(s);
r = a % d;
if(!r)
a.print();
else
{
aux = d - r;
a += aux;
a.print();
}
return 0;
}
*/
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
const int NMAX=1000000;
int v[NMAX+5],c[NMAX+5];
void hn_constr(long long n,int a[NMAX+5])
{
memset(a,0,sizeof(a));
do
{
a[++a[0]]=n%10;
n/=10;
}while(n);
}
long long hn_divide_rest(int a[],long long b)
{
long long r;
int i;
r=0;
for(i=a[0];i>=1;--i)
{
r=r*10+a[i];
r=r%b;
}
return r;
}
void hn_adun(int a[],int b[])
{
int tr,i,aux;;
tr=0;
for(i=1;i<=a[0];++i)
{
aux=(a[i]+b[i]+tr);
a[i]=aux%10;
tr=aux/10;
}
if(tr)
a[++a[0]]=1;
}
void print(int x[])
{
int i;
for(i=x[0];i>=1;--i)
printf("%d",x[i]);
}
int main()
{
freopen("next.in","r",stdin);
freopen("next.out","w",stdout);
long long d,r;
char ch;
while(scanf("%c",&ch) && ch!='\n')
v[++v[0]]=ch-48;
reverse(v+1,v+v[0]+1);
scanf("%lld",&d);
r=hn_divide_rest(v,d);
if(r==0)
print(v);
else
{
long long ans=d-r;
memset(c,0,sizeof(c));
hn_constr(ans,c);
hn_adun(v,c);
print(v);
printf("\n");
}
return 0;
}