Pagini recente » Cod sursa (job #399448) | Cod sursa (job #3185960) | Cod sursa (job #2675208) | Cod sursa (job #55085) | Cod sursa (job #2673162)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin ("next.in");
ofstream fout ("next.out");
char s[1000001];
int n[1000001], d[20], r[20];
void adunare(int a[], int b[])
{
//a<- a+b
int i, r=0;
for(i=a[0]+1; i<=b[0]; i++) a[i]=0;
for(i=b[0]+1; i<=a[0]; i++) b[i]=0;
a[0]=max(a[0], b[0]);
for(i=1; i<=a[0]; i++)
{
a[i]=a[i]+b[i]+r;
r=a[i]/10;
a[i]%=10;
}
if(r)
{
a[++a[0]]=r;
}
}
void scadere(int a[], int b[])
{
//a=a-b, se garanteaza a>=b
int i, r=0;
for(i=b[0]+1; i<=a[0]; i++) b[i]=0;
for(i=1; i<=a[0]; i++)
{
a[i]=a[i]-r-b[i];
r=0;
if(a[i]<0)
{
r=1;
a[i]+=10;
}
}
while(a[0]>1 && a[a[0]]==0) a[0]--;
}
int comparare(int a[], int b[])
{
if(a[0]<b[0]) return -1;
if(a[0]>b[0]) return 1;
for(int i=a[0]; i>0; i--)
{
if(a[i]>b[i]) return 1;
else if(b[i]>a[i]) return -1;
}
return 0;
}
void inmultire10(int a[])
{
for(int i=a[0]+1; i>=2; i--)
{
a[i]=a[i-1];
}
a[0]++;
}
void impartire(int a[], int b[])
{
//c=a/b;
int i; r[0]=1; r[1]=0;
for(i=a[0]; i>0; i--)
{
inmultire10(r);
r[1]=a[i];
while( comparare(b, r)!=1 )
{
scadere(r, b);
}
/*a[i]=r*10+a[i];
r=a[i]%x;
a[i]/=x;*/
}
}
void afisare(int a[])
{
for(int i=a[0]; i>0; i--) fout<<a[i];
fout<<"\n";
}
void citire()
{
int i, str;
fin.getline(s, 1000001);
str=strlen(s);
n[0]=str;
for(i=str-1; i>=0; i--)
{
n[str-i]=s[i]-'0';
}
fin.getline(s, 1000001);
str=strlen(s);
d[0]=str;
for(i=str-1; i>=0; i--)
{
d[str-i]=s[i]-'0';
}
}
int main()
{
citire();
impartire(n, d);
if(r[0]!=1 || r[1]!=0)
{
scadere(d, r);
adunare(n, d);
}
afisare(n);
}