Cod sursa(job #412813)

Utilizator toniobFMI - Barbalau Antonio toniob Data 6 martie 2010 11:45:18
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <fstream>
using namespace std;

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

const long long NMax=(long long)1000002;
const unsigned short DMax=1<<5;
long long DMic;
short int N[NMax],DMare[DMax],Rez[NMax];

void IN(){
	for(char c;FIn>>noskipws>>c && c!='\n';N[++N[0]]=c-'0'){
	}
	for(int aux,i=1;i<=N[0]/2;aux=N[i],N[i]=N[N[0]-i+1],N[N[0]-i+1]=aux,++i){
	}
	for(char c;FIn>>noskipws>>c && c!='\n';DMare[++DMare[0]]=c-'0'){
	}
	for(int aux,i=1;i<=DMare[0]/2;aux=DMare[i],DMare[i]=DMare[DMare[0]-i+1],DMare[DMare[0]-i+1]=aux,++i){
	}
	for(int i=DMare[0];i>=1;DMic=DMic*10+DMare[i--]){
	}
}

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

void Suma(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-1;
}

void Scadere(short int a[],short int b[]){
	int i,t=0;
	for(i=1;i<=a[0];++i){
		a[i]+=(t=(a[i]-=((i<=b[0])?b[i]:0)+t)<0)%10;
	}
	for(;a[0]>1&&!a[a[0]];--a[0]){
	}
}

void JUST_DO_IT(){
	long long rest=Rest(N,DMic);
	for(;rest;Rez[++Rez[0]]=rest%10,rest/=10){
	}
	Suma(N,DMare);
	Scadere(N,Rez);
}

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

int main(){
	IN();
	JUST_DO_IT();
	OUT();
	return 0;
}