Cod sursa(job #2393903)

Utilizator cyg_alexandru546Zob Alexandru Mihai cyg_alexandru546 Data 1 aprilie 2019 10:38:24
Problema Next Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cstdlib>
using namespace std;
const int NMAX=1000005;
int c[NMAX];

inline void memset(int a[NMAX])
{
		int i;
	for(i=1;i<=NMAX;i++)
		a[i]=0;
}
void print(int a[])
{
	int i;
	for(i=a[0];i>=1;i--)
		printf("%d",a[i]);
	printf("\n");
}
void h_adun(int a[],int b[],int c[NMAX])
{
	int i,tr,aux;
//	memset(c);
	c[0]=max(a[0],b[0]);
	tr=0;
	for(i=1;i<=c[0];i++)
	{
		aux=a[i]+b[i]+tr;
		c[i]=aux%10;
		tr=aux/10;
	}
	if(tr)
		c[++c[0]]=tr;
}
int rest_h_int(int a[],int k)
{
	int i,r;
	r=0;
	for(i=a[0];i>=1;i--)
	{
		r=r*10+a[i];
		r=r%k;
	}
	return r;
}
int main()
{
            freopen("next.in","r",stdin);
            freopen("next.out","w",stdout);
            char ch;
			int a[NMAX],b[25],c[NMAX],i,r,d,m,copie;
			memset(a);
			for(i=0;i<=24;i++)
				b[i]=0;
			while(scanf("%c",&ch)==1 && ch!='\n')
				if(ch>='0' && ch<='9')
					a[++a[0]]=ch-'0';
			reverse(a+1,a+a[0]+1);
			scanf("%d",&d);
			r=rest_h_int(a,d);
			m=d-r;
			copie=m;
			//de completat
			do
			{
				b[++b[0]]=m%10;
				m=m/10;
			}while(m>0);
			m=copie;
			if(m!=d)
			{
                h_adun(a,b,c);
                print(c);
			}
			else
                print(a);
            return 0;
}