Cod sursa(job #257481)

Utilizator SheepBOYFelix Liviu SheepBOY Data 13 februarie 2009 13:41:16
Problema Next Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include<stdio.h>  
#include<string.h>  
struct GigaNumber  
{  
    int overflow;
	short int number[1000010];  
    void plus(int aux)  
    { 
		int 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[i]%=10;
		++number[overflow];
		overflow++;
		}
    }  
};  
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');
	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--;
	}
	n.overflow=nr;  
    scanf("%lld",&dimprt); 
	st=imparte(n,dimprt);
	if(st)
	{
		dimprt-=st;
		n.plus(dimprt);
	}	
    outfile(n);  
}