Pagini recente » Cod sursa (job #2077640) | Cod sursa (job #1887540) | Cod sursa (job #2666366) | Cod sursa (job #551046) | Cod sursa (job #1354085)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#define BASE 10
using namespace std;
ifstream f("next.in");
ofstream g("next.out");
typedef int Huge[100000000];
Huge P,B;
string s;
unsigned long long d;
unsigned long long Divide(Huge A, long long X)
/* A <- A/X si intoarce A%X */
{ int i;
unsigned long long R=0;
for (i=A[0];i;i--)
{ A[i]=(R=10*R+A[i])/X;
R%=X;
}
while (!A[A[0]] && A[0]>1) A[0]--;
return R;
}
void Mult(Huge H, unsigned long long X)
/* H <- H*X */
{ int i;
unsigned long long T=0;
for (i=1;i<=H[0];i++)
{ H[i]=H[i]*X+T;
T=H[i]/10;
H[i]=H[i]%10;
}
while (T) /* Cat timp exista transport */
{ H[++H[0]]=T%10;
T/=10;
}
}
void Add(Huge A, Huge B)
/* A <- A+B */
{ int i,T=0;
if (B[0]>A[0])
{ for (i=A[0]+1;i<=B[0];) A[i++]=0;
A[0]=B[0];
}
else for (i=B[0]+1;i<=A[0];) B[i++]=0;
for (i=1;i<=A[0];i++)
{ A[i]+=B[i]+T;
T=A[i]/10;
A[i]%=10;
}
if (T) A[++A[0]]=T;
}
void AtribValue(Huge H, unsigned long long X) {
H[0] = 0;
while (X) {
++H[0];
H[H[0]] = X % BASE;
X /= BASE;
}
}
void afis(Huge A)
{
for(int i=1; i<=A[0]; i++)
g<<A[A[0]-i+1];
}
int main()
{
f>>s;
f>>d;
for(int i=0; i<s.size(); i++)
P[s.size()-i]=s[i]-'0';
P[0]=s.size();
AtribValue(B,1);
if(Divide(P,d)==0)
{
Mult(P,d);
afis(P);
}else
{Add(P,B);
Mult(P,d);
afis(P);
}
}