Cod sursa(job #912568)

Utilizator raulstoinStoin Raul raulstoin Data 12 martie 2013 15:30:27
Problema Next Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<fstream>
#include<cstring>
#include<algorithm>
#define NMAX 1000010
#define ULL unsigned long long
using namespace std;
short b[20],v[NMAX];
ULL d,m;
void read()
{
	ifstream fin("next.in");
	char x[NMAX];
	fin>>x>>d;
	v[0]=strlen(x);
	for(int i=1;i<=v[0];i++)
		v[i]=(short)(x[i-1]-'0');
	fin.close();
}
void transform(ULL aux)
{
	int i;
	for(i=1;aux;i++,aux/=10)
		b[i]=aux%10;
	b[0]=i-1;
}
void mod()
{
	for(int i=1;i<=v[0];i++)
	{
		m=m*10+v[i];
		if(m<d)
			continue;
		m%=d;
	}
}
void add()
{
	int i;
	for(i=1;i<=v[0] || i<=b[0] || v[i];i++)
	{
		if(i<=b[0])
			v[i]+=b[i];
		if(v[i]>9)
		{
			v[i+1]++;
			v[i]%=10;
		}
	}
	v[0]=i-1;
}
void sub()
{
	int i;
	for(i=1;i<=v[0] || v[i];i++)
	{
		if(i<=b[0])
			v[i]-=b[i];
		if(v[i]<0)
		{
			v[i]+=10;
			v[i+1]--;
		}
	}
	v[0]=i-1;
}
void solve()
{
	transform(d);
	mod();
	reverse(v+1,v+v[0]+1);
	add();
	transform(m);
	sub();
}
void print()
{
	ofstream fout("next.out");
	for(int i=v[0];i;i--)
		fout<<v[i];
}
int main()
{
	read();
	solve();
	print();
	return 0;
}