Pagini recente » Cod sursa (job #2357008) | Cod sursa (job #2390809) | Cod sursa (job #2048491) | Cod sursa (job #546899) | Cod sursa (job #1748252)
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
const int NMAXDIGIT = 1000005;
char s[1000005];
class HugeN
{
private:
int x[NMAXDIGIT];
public:
HugeN()
{
memset(x,0,sizeof(x));
x[0] = 1;
}
HugeN(char *s)
{
int n = strlen(s);
memset(x,0,sizeof(x));
x[0] = n;
for(int i = n - 1 ; i >= 0 ; i--)
{
x[n - i] = (s[i] - '0');
}
}
void get_huge();
HugeN&operator +(int k);
HugeN&operator +(const HugeN &other);
long long operator %(long long k);
HugeN& operator+=(long long k);
};
void HugeN::get_huge()
{
for(int i = x[0] ; i >= 1 ; i--)
{
printf("%d",x[i]);
}
printf("\n");
}
HugeN& HugeN::operator +(const HugeN &other)
{
HugeN temp;
temp.x[0] = max(x[0],other.x[0]);
int tr = 0 , aux;
for(int i = 1 ; i <= temp.x[0] ; i++)
{
aux = x[i] + other.x[i] + tr;
temp.x[i] = aux % 10;
tr = aux / 10;
}
if(tr != 0)
{
temp.x[0]++;
temp.x[temp.x[0]] = tr;
}
return temp;
}
long long HugeN::operator%(long long k)
{
int r = 0;
for(int i = x[0] ; i >= 1 ; i--)
{
r = r * 10 + x[i];
r = r % k;
}
return r;
}
HugeN& HugeN::operator += (long long k)
{
long long tr = k;
long long aux;
for(int i = 1 ; i <= x[0] ; i++)
{
aux = x[i] + tr;
x[i] = aux % 10;
tr = aux / 10;
}
while(tr)
{
x[++x[0]] = tr % 10;
tr /= 10;
}
return *this;
}
int main()
{
freopen("next.in","r",stdin);
freopen("next.out","w",stdout);
long long D;
gets(s);
scanf("%lld",&D);
HugeN N(s);
int r = N % D;
N += (D - r);
N.get_huge();
return 0;
}