Cod sursa(job #257043)

Utilizator SheepBOYFelix Liviu SheepBOY Data 12 februarie 2009 18:43:46
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<stdio.h>
#include<string.h>
struct GigaNumber
{
	int overflow,number[200000];
	void plus()
	{
		int i=0;
		++number[i];
		if(number[i]>9)
			{
				number[i]%=10;
				++number[i+1];
				if(overflow==i+1)
					++overflow;
			}
			++i;
		while(number[i]>9)
		{
			if(number[i]>9)
			{
				number[i]%=10;
				++number[i+1];
				if(overflow==i+1)
					++overflow;
			}
			++i;
		}
	}
};
GigaNumber n; 
int imparte(GigaNumber a,long long dp)
{
	int i=a.overflow-1;
	long long r,aux=0;
	while(i>0)
	{
		while(aux<dp)
		{
			aux=aux*10+a.number[i];
			--i;
		}
		r=aux%dp;
		aux/=dp;
	}
	if(!r)
		return 1;
	else
		return 0;
}
void outfile(GigaNumber a)
{
	for(int i=a.overflow-1;i>=0;--i)
		printf("%d",a.number[i]);
}
int main()
{
	char buffer[1000000];
	int nr,i;
	long long dimprt=0;
	freopen("next.in","r",stdin);
	freopen("next.out","w",stdout);
	gets(buffer);
	nr=strlen(buffer);
	for(i=nr-1;i>=0;--i)
	n.number[nr-i-1]=buffer[i]-48;
	n.overflow=nr;
	scanf("%lld",&dimprt);
	while(!imparte(n,dimprt))
		n.plus();
	outfile(n);
}