Cod sursa(job #702401)

Utilizator mlupseLupse-Turpan Mircea mlupse Data 1 martie 2012 21:33:38
Problema Next Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
using namespace std;
#include<cstdio>
#include<algorithm>
#define MAX 1000005
int A[MAX],B[MAX];
void citire()
{
	int i=0;
	char chs;
	do{
		scanf("%c",&chs);
		if(chs!='\n')
			A[++i]=chs-'0';
		else
		{
			reverse(A+1,A+i+1);
			A[0]=i;
		}
	}while(chs!='\n');
}
void div(long long D)
{
	int i; long long t;
	for(i=A[0],t=0;i>0;A[i]=(t=t*10+A[i])/D,t=t%D,i--);
	for(;(A[0]>0)&&(!A[A[0]]);A[0]--);
}
void mult(long long D)
{
	int i; long long t;
	for(i=1,t=0;i<=A[0]||t;A[i]=(t=A[i]*D+t)%10,t=t/10,i++);
	A[0]=i-1;
}
void cifre(long long D)
{
	int i=0;
	while(D)
	{
		B[++i]=D%10;
		D=D/10;
	}
	B[0]=i;
}
void adun()
{
	int i,t;
	for(i=1,t=0;i<=A[0]||i<=B[0]||t;A[i]=(t=A[i]+B[i]+t)%10,t=t/10,i++);
	A[0]=i-1;
}
void afisare()
{
	int i;
	for(i=A[0];i;i--)
		printf("%d",A[i]);
}
int main()
{
	freopen("next.in","r",stdin);
	freopen("next.out","w",stdout);
	long long D;
	citire();
	scanf(" %lld",&D);
	div(D);
	mult(D);
	cifre(D);
	adun();
	afisare();
	return 0;
}