Cod sursa(job #260206)

Utilizator Matei14Popa-Matei Mihai Matei14 Data 16 februarie 2009 19:50:46
Problema Next Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<stdio.h>
#include<string.h>
#define N 1000007

char s[N];
int n[N];
long long d;

void div(int A[],long long B){
	long long i,t=0;
	for(i=A[0];i;--i,t%=B)
		A[i]=(t=t*10+A[i])/B;
	for(;A[0]>1&&!A[A[0]];--A[0]);
}  

void mul(int A[],long long B){
	long long i,t=0;
	for(i=1;i<=A[0]||t;++i,t/=10)
		A[i]=(t+=A[i]*B)%10;
	A[0]=i-1;
}  

long long mod(int A[],long long B){
	long long i,t=0;
	for(i=A[0];i>0;--i)
		t=(t*10+A[i])%B;
	return t;
}  

void form(){
	int i=0,k=0,q;
	q=strlen(s);
	while(s[i]){
		k++;
		n[q-k+1]=s[i]-'0';
		i++;
	}
	n[0]=k;
}

int main(){
	int i,t=0;
	freopen("next.in","r",stdin);
	freopen("next.out","w",stdout);
	scanf("%s",s);
	form();
	scanf("%lld",&d);
	if(!mod(n,d))
		for(i=n[0];i;--i)
			printf("%d",n[i]);
	else{
		div(n,d);
		n[1]++;
		n[1]%=10;
		t=n[1]/10;
		for(i=2;i<=n[0]||t;++i)
			n[i]=t+n[i],t=n[i]/10;
		n[0]=i-1;
		mul(n,d);
		for(i=n[0];i>0;--i)
			printf("%d",n[i]);
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}