Cod sursa(job #258025)

Utilizator SheepBOYFelix Liviu SheepBOY Data 14 februarie 2009 15:16:50
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.1 kb
#include<stdio.h>      
#include<string.h>  
int decomp(long long aux,int g[20])
{
	int nr=0;
	while(aux)
	{
		g[nr++]=aux%10;
		aux/=10;
	}
	return nr;
}
struct GigaNumber      
{      
    int overflow;    
    short int number[1000010];      
    void plus(long long aux)      
    {     
        int nra=0,i=0;    
		int ginecolog[20];
		nra=decomp(aux,ginecolog);
		int raportalau=0;
		for(i=0;i<=nra;++i)
		{
			if(i<nra)
			number[i]+=ginecolog[i];
			number[i+1]+=number[i]/10;
			if(number[i+1]&&i+1==nra)
				raportalau=1;
			number[i]%=10;
			
		}
		if(raportalau)
			++nra;
		if(nra>overflow)
			overflow=nra;
   }      
};      
GigaNumber n;     
long long imparte(GigaNumber &v,long long dp)      
{      
    int i=v.overflow-1,nr=0;        
    long long aux=0;      
    for(i=n.overflow-1;i>=0;)    
    {    
        while(aux<dp&&i>=0)      
        {      
            aux=aux*10+v.number[i];      
            --i;      
        }      
        aux%=dp;    
    }      
    return aux;    
}      
void outfile(GigaNumber a)      
{      
    for(int i=a.overflow-1;i>=0;--i)      
        printf("%d",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);    
    aux=48;    
    scanf("%c",&aux);       
    do    
    {    
        n.number[nr]=aux-48;    
        ++nr;    
        scanf("%c",&aux);    
    }    
    while(aux!='\n');    
	scanf("%c",&aux);
	do
	{
	dimprt=dimprt*10+aux-48;	
	scanf("%c",&aux);
	}
	while(!feof(stdin));
	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--;    
    }    
    long long sc=0;  
    n.overflow=nr;      
    //scanf("%lld",&dimprt);     
    sc=imparte(n,dimprt);    
    if(sc)    
    {    
        dimprt-=sc;    
        n.plus(dimprt);    
    }       
    outfile(n);      }