Cod sursa(job #257465)

Utilizator SheepBOYFelix Liviu SheepBOY Data 13 februarie 2009 13:16:38
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include<stdio.h>  
#include<string.h>  
struct GigaNumber  
{  
    long long overflow;
	short int number[100500];  
    void plus(long long aux)  
    { 
		long long i=0;
	number[i]+=aux;
		while(number[i]>9&&i<overflow)
		{
			number[i+1]+=number[i]/10;
			number[i]%=10;
			++i;
		}
		if(number[i]>9)
		{
		++number[overflow];
		overflow++;
		}
    }  
};  
GigaNumber n; 
long long imparte(GigaNumber &v,long long dp)  
{  
	long long  i=v.overflow-1,nr=0;	
    long long r,aux=0;  
    while(i>=0)  
    {  
        while(aux<dp&&i>=0)  
        {  
            aux=aux*10+v.number[i];  
            --i;  
        }  
		r=aux%dp;
        aux/=dp;
	}  
	return r;
}  
void outfile(GigaNumber a)  
{  
    for(long long i=a.overflow-1;i>=0;--i)  
        printf("%d",a.number[i]);  
}  
int main()  
{  
    long long nr=0,i;
	char aux;	
    long long dimprt=0;  
    freopen("next.in","r",stdin);  
    freopen("next.out","w",stdout);
	aux=48;
	scanf("%c",&aux);	
    do
	{
		n.number[nr]=aux-48;
		++nr;
		scanf("%c",&aux);
	}
	while(aux!='\n');
	long long st=0;
	long long dr=nr-1;
	while(st<dr)
	{
		aux=n.number[st];
		n.number[st]=n.number[dr];
		n.number[dr]=aux;
		st++;
		dr--;
	}
	n.overflow=nr;  
    scanf("%lld",&dimprt); 
	st=imparte(n,dimprt);
	if(st)
	{
		st=dimprt-st;
		n.plus(st);
	}		
    outfile(n);  
}