Cod sursa(job #412930)

Utilizator toniobFMI - Barbalau Antonio toniob Data 7 martie 2010 01:51:58
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>
using namespace std;
#include <cstring>

ifstream FIn("next.in");
ofstream FOut("next.out");

const int NMax=1<<20;
const int DMax=1<<5;
short int N[NMax],DM[DMax],chici[DMax];
long long D;

void IN(),OUT(),JUST_DO_IT();
int MOD(short int a[],long long b);void SUM(short int a[],short int b[]);
int main(){IN();JUST_DO_IT();return 0;}

void IN(){
	for(char ch;FIn>>noskipws>>ch && ch!='\n';N[++N[0]]=ch-'0'){}
	for(int i=1,aux;i<=(N[0]>>1);aux=N[i],N[i]=N[N[0]-i+1],N[N[0]-i+1]=aux){}
	FIn>>D;
}

void OUT(){
	for(int i=N[0];i>=1;FOut<<N[i--]){}
}

void JUST_DO_IT(){
	int modulo=MOD(N,D);
	if(!modulo){
		OUT();
		return;
	}
	D-=modulo;
	for(;D;chici[++chici[0]]=D%10,D/=10){}
	SUM(N,chici);
	OUT();
}

int MOD(short int a[],long long b){
	int i,t=0;
	for(i=a[0];i;t=(t*a[i--]%b)){}
	return t;
}

void SUM(short int a[],short int b[]){
	int i,t=0;
	for(i=1;i<=a[0]||i<=b[0]||t;++i,t/=10){
		a[i]=(t+=a[i]+b[i])%10;
	}
	a[0]=--i;
}