Pagini recente » Cod sursa (job #1977364) | Cod sursa (job #2780424) | Cod sursa (job #338416)
Cod sursa(job #338416)
#include <iostream.h>
#include <stdio.h>
#include <fstream.h>
#define LG_MAX 10000
typedef int BigNumber[LG_MAX];
BigNumber N,M,r; //M este rezultatul; M=N+( (D-R) %D ) %10
long long D,i,R,p,nr=0,aux;
char s[LG_MAX],temp,sir[LG_MAX];
int mod (BigNumber a, int b) //functie calculare rest
{
int i,t=0;
for (i=a[0];i>0;i--)
t=(t*10+a[i])%b;
return t;
}
int suma (BigNumber a, BigNumber b, BigNumber x) //functie adunare nr mari
{
int i,cifra,t=0,max;
if (a[0]<b[0]) max=b[0];
else max=a[0];
if (a[0]<b[0])
{
max=b[0];
for (i=a[0]+1;i<=b[0];i++)
a[i]=0;
}
else
{
max=a[0];
for (i=b[0]+1;i<=a[0];i++)
b[i]=0;
}
for (i=1;i<=max;i++)
{
cifra=a[i]+b[i]+t;
x[i]=cifra%10;
t=cifra/10;
}
if (t) x[i]=t;
else i--;
x[0]=i;
}
int main()
{
ifstream f("next.in");
ofstream g("next.out");
i=0;
while (!f.eof() )
{
f.get(temp); //citesc din fisier caracter cu caracter
if ( (temp=='\r') || (temp=='\n') || (!isdigit(temp)) ) break;
s[i]=temp;
i++;
}
s[i]='\0'; //inchei sirul cu NULL
f>>D;
N[0]=strlen(s); //calculez lungimea sirului
for (i=N[0]-1;i>=0;i--)
N[N[0]-i]=s[i]-'0';
for (i=N[0]+1;i<LG_MAX;i++)
N[i]=0;
R=mod(N,D);
p=D-R;
p=p%D;
//p=( (D-R) %D) %10
i=0;
while (p)
{
sir[i]=p%10 + '0';
p/=10;
i++;
}
r[0]=strlen(sir);
for (i=r[0]-1;i>=0;i--)
r[r[0]-i]=sir[i]-'0';
for (i=r[0]+1;i<LG_MAX;i++)
r[i]=0;
suma (N,r,M);
for (int i=M[0];i>=1;i--)
g<<M[i];
return 0;
}