Cod sursa(job #1712464)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 2 iunie 2016 21:57:15
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <cstdio>
#include <algorithm>
#define MAX 2000000
using namespace std;
 
typedef int B[1000005];
B rez,aux;
char f[MAX];
int D,t,pos=0,MOD=0;
void Div(B &arr, int nr)
{
	int t=0;
	aux[0]=0;
      for(int i=arr[0];i>0;i--)
	  {
		t=t*10+arr[i];
		if(t/nr>0)
		{
			aux[++aux[0]]=t/nr;
			t%=nr;
		}
	  }
	  for(int i=0;i<=aux[0];i++)
		  arr[i]=aux[i];
	  MOD=t;
}
void Prod(B &arr,int nr)
{
    int t=0;
    for(int i=1;i<=arr[0];i++)
    {
        arr[i]=t+arr[i]*nr;
        t=arr[i]/10;
        arr[i]%=10;
        if(i==arr[0]&&t>0)
        {
            arr[0]++;
            arr[arr[0]]=0;
        }
    }
}
void Sum(B &s,B arr)
{
    int t=0;
    s[0]=max(s[0],arr[0]);
    for(int i=1;i<=arr[0];i++)
        s[i]+=arr[i];
    for(int i=1;i<=s[0];i++)
    {
        s[i]+=t;
        t=s[i]/10;
        s[i]%=10;
    }
    if(t>0)
    {
        s[0]++;
        s[s[0]]=t;
    }
}
 
int main()
{
    freopen("next.in","r",stdin);
    freopen("next.out","w",stdout);
 
    fread(f,1,MAX,stdin);
    while(f[pos]>='0'&&f[pos]<='9')
        rez[++rez[0]]=f[pos++]-'0';
 
    for(int i=1;i<=rez[0]/2;i++)
    {
        t=rez[i];
        rez[i]=rez[rez[0]-i+1];
        rez[rez[0]-i+1]=t;
    }
    pos++;
    while(f[pos]>='0'&&f[pos]<='9')
        D=D*10+f[pos++]-'0';
    Div(rez,D);
	if(MOD>0)
	{
    aux[0]=aux[1]=1;
    if(t>0)
        Sum(rez,aux);
	}
    Prod(rez,D);
    for(int i=rez[0];i>0;i--)
        printf("%d",rez[i]);
    return 0;
}