Cod sursa(job #257440)

Utilizator SheepBOYFelix Liviu SheepBOY Data 13 februarie 2009 12:37:44
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include<stdio.h>  
#include<string.h>  
struct GigaNumber  
{  
    int overflow;
	short int number[1000000];  
    void plus(int aux)  
    { 
	number[i]+=aux;
	i=0;
		while(number[i]>9&&i<n.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)  
{  
    int i=v.overflow-1,nr=0;	
    long long r,aux=0,a[10000];  
    while(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("%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); 
	st=dimprt-imparte(n,dimprt);
	n.plus(st);  
    outfile(n);  
}