Cod sursa(job #257750)

Utilizator SheepBOYFelix Liviu SheepBOY Data 13 februarie 2009 21:59:18
Problema Next Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.74 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--;  
    }  
    long long sc=0;
	n.overflow=nr;    
    scanf("%lld",&dimprt);   
    sc=imparte(n,dimprt);  
    if(sc)  
    {  
        dimprt-=sc;  
        n.plus(dimprt);  
    }     
    outfile(n);    
}