Cod sursa(job #991973)

Utilizator sebinechitasebi nechita sebinechita Data 31 august 2013 22:21:54
Problema Next Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.25 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <string>
#include <climits>
#include <algorithm>
#include <cmath>
using namespace std;

void show(long long int *al);
void inm(long long int* al, long long int* bl, long long int* dl);
void transforma(long long int sos, long long int* al);
void fshow(long long int *al);
void fact(long long int n, long long int* al);

ifstream fin ("next.in");
ofstream fout("next.out");
#define MAX 1000002

long long int i,s,m,a1,t,j,l,d,k,ci;
char n[MAX];

long long int a[MAX],b[20],c[MAX],ab[MAX];


void inm(long long int* al, long long int* bl, long long int* cl)
{

    cl[0]=al[0]+bl[0]-1;
    for(i=1;i<=al[0];i++)
    {
        for(j=1;j<=bl[0];j++)
        {
            cl[i-1+j]+=al[i]*bl[j];

        }
    }

    for(i=1;i<=cl[0];i++)
    {

        if(cl[i]>9)
        {
            cl[i+1]+=cl[i]/10;
            cl[i]%=10;
        }
    }
    if(cl[i])
        cl[0]++;



}

void transforma(long long int sos, long long int* al)
{
    long long int k=0;

    while(sos)
    {
        al[++k]=sos%10;

        sos/=10;
    }


    al[0]=k;

}

void show(long long int *al)
{
    for(i=al[0];i>=1;i--)
    {
        cout<<al[i];
    }
    cout<<"\n";
}

void fshow(long long int *al)
{
    for(i=al[0];i>=1;i--)
    {
        fout<<al[i];
    }
}

void imp(long long int* al,long long int d, long long int* cl)
{
    long long int p=0;
    for(i=al[0];i>=1;i--)
    {
        al[i]+=p;
        cl[i]=al[i]/d;
        p=al[i]%d;
        p*=10;
    }
    for(i=al[0];cl[i]==0;i--);
    cl[0]=i;
}

void add1(long long int* cl)
{
    i=1;
    cl[i]++;
    while(cl[i]==10)
    {
        cl[i]=0;
        i++;
        cl[i]++;
    }
    if(cl[cl[0]+1])
        cl[0]++;
}

void minus1(long long int* al)
{
    a[1]--;
    i=1;
    while(al[i]<0)
    {
        al[i]+=10;
        i++;
        al[i]--;
    }
    if(al[al[0]]==0)
        al[0]--;
}

int main()
{

    fin>>n;
    a[0]=strlen(n);
    for(i=1;i<=a[0];i++)
    {
        a[i]=n[a[0]-i]-'0';
    }
    minus1(a);
    fin>>d;
    imp(a,d,c);
    add1(c);
    transforma(d,b);
    inm(b,c,ab);
    fshow(ab);

    return 0;
}