Cod sursa(job #257263)

Utilizator SheepBOYFelix Liviu SheepBOY Data 12 februarie 2009 23:14:19
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.68 kb
#include<stdio.h>  
#include<string.h>  
struct GigaNumber  
{  
    int overflow;
	char number[200000];  
    void plus()  
    {  
        int i=0;
		int mrt=0;
		if(number[i]=='9')
		{			
			number[i]='0';
			mrt=1;
		}
		else
			++number[i];
        ++i;
		while(mrt)
        {  
			mrt=0;
			if(number[i]=='9')
			{
				number[i]='0';
				mrt=1;
			}
			else
			{
				if(number[i])
				++number[i];
				else
					number[i]='1';
				break;
			}
			++i;  
			if(i>=overflow)
				overflow=i+1;
        }
    }  
};  
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]-48;  
            --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("%c",a.number[i]);  
}  
int main()  
{  
    int nr=0,i;
	char aux;	
    long long dimprt=0;  
    freopen("next.in","r",stdin);  
    freopen("next.out","w",stdout);
	scanf("%c",&aux);	
    do
	{
		n.number[nr]=aux;
		++nr;
		scanf("%c",&aux);
	}
	while(aux!='\n');
	int st=0;
	int dr=nr-1;
	/*while(st<dr)
	{
		aux=n.number[st];
		n.number[st]=n.number[dr];
		n.number[dr]=aux;
		st++;
		dr--;
	}*/
	//gets(n.number);
	/*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);  
}