Pagini recente » Diferente pentru runda/porc_again intre reviziile 2 si 1 | Istoria paginii utilizator/archmageguy | Diferente pentru articole intre reviziile 177 si 178 | Diferente pentru articole intre reviziile 59 si 192 | Cod sursa (job #2013445)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("next.in");
ofstream out("next.out");
const int maxn = 1001000;
short int A[maxn];
short int B[maxn];
void add(short int A[], short int B[])
{
int tr = 0;
if(B[0] > A[0])
{
for(int i = A[0] + 1; i <= B[0]; i++)
A[i]=0;
A[0] = B[0];
}
else
for(int i = B[0] + 1; i <= A[0]; i++)
B[i] = 0;
for(int i = 1; i <= A[0]; i++)
{
A[i] = A[i] + B[i] + tr;
tr = A[i] / 10;
A[i] = A[i] % 10;
}
if(tr > 0)
A[++A[0]] = tr;
}
long long rest(short int A[], long long d)
{
long long r = 0;
for(int i = A[0]; i >= 1; i--)
r = (r * 10 + A[i]) % d;
return (d - r);
}
void convert(long long x)
{
if(x == 0)
{
B[0] = 1;
return;
}
while(x > 0)
{
B[++B[0]] = x % 10;
x = x / 10;
}
return;
}
int main()
{
string s;
in >> s;
long long d;
in >> d;
for(int i = s.size() - 1; i >= 0; i--)
A[++A[0]] = s[i] - '0';
convert(rest(A, d));
//for(int i = B[0]; i >= 1; i--)
//cerr << B[i];
//cerr << "\n";
add(A, B);
for(int i = A[0]; i >= 1; i--)
out << A[i];
out << "\n";
return 0;
}