Pagini recente » Cod sursa (job #2863600) | Cod sursa (job #3320237) | Cod sursa (job #3355707) | Cod sursa (job #37712) | Cod sursa (job #1542797)
#include <stdio.h>
#include <vector>
#include <algorithm>
#define nmax 1100010
using namespace std;
typedef long long int ll;
struct bigint {
vector <short int> t;
bigint() { t.resize(nmax); }
int size() { return t[0]; }
void print() {
for (int i=t[0];i>=1;i--) printf("%d",t[i]);
printf("\n");
}
};
ll x,p; bigint a,b;
char s[nmax];
void addbigint(bigint &a)
{
for (int i=1;s[i];i++) {
a.t[0]=i; a.t[i]=s[i]-48;
}
for (int i=1;i<=a.t[0]/2;i++)
swap(a.t[i],a.t[a.t[0]-i+1]);
}
void ad(bigint &a,ll x)
{
a.t[0]=0;
if (x==0) { a.t[0]=1; a.t[1]=0; return; }
while (x>0) {
a.t[0]++;
a.t[a.t[0]]=x%10;
x=x/10;
}
}
bigint operator + (bigint &a,const bigint &b)
{
int r=0;
for (int i=1;i<=max(a.t[0],b.t[0]);i++) {
int bb=(a.t[i]+b.t[i]+r); a.t[i]=bb%10; r=bb/10;
}
a.t[0]=max(a.t[0],b.t[0]);
if (r>0) a.t[0]++,a.t[a.t[0]]=r;
return a;
}
ll operator % (const bigint &a,ll x)
{
ll r=0;
for (int i=a.t[0];i>=1;i--) r=(1LL*10*r+a.t[i])%x;
return r;
}
int main() {
freopen("next.in","r",stdin);
freopen("next.out","w",stdout);
gets(s+1);
scanf("%lld",&x);
addbigint(a); p=a%x;
if (p==0) { puts(s+1); return 0; }
ad(b,x-p); a=a+b;
a.print();
return 0;
}