Pagini recente » Cod sursa (job #2035846) | Cod sursa (job #2354766) | Cod sursa (job #1415314) | Cod sursa (job #1623705) | Cod sursa (job #992026)
Cod sursa(job #992026)
#include <iostream>
#include <fstream>
#include <cstring>
#include <string>
#include <climits>
#include <algorithm>
#include <cmath>
using namespace std;
ifstream fin ("next.in");
ofstream fout("next.out");
#define MAX 1000002
#define lli x long long int x
#define ui x unsigned x
long long int i,s,m,a1,t,j,l,d,k,ci;
char n[MAX];
unsigned int a[MAX],b[20],c[MAX];
void inm(unsigned int* al, unsigned int* bl, unsigned int* dl)
{
int* ml=new int[MAX];
ml[0]=al[0]+bl[0]-1;
for(i=1;i<=al[0];i++)
{
for(j=1;j<=bl[0];j++)
{
ml[i-1+j]+=al[i]*bl[j];
}
}
for(i=1;i<=ml[0];i++)
{
if(ml[i]>9)
{
ml[i+1]+=ml[i]/10;
ml[i]%=10;
}
}
if(ml[i])
ml[0]++;
for(i=0;i<=ml[0];i++)
{
dl[i]=ml[i];
}
delete ml;
}
void transforma(long long int sos, unsigned int* al)
{
long long int k=0;
while(sos)
{
al[++k]=sos%10;
sos/=10;
}
al[0]=k;
}
void fshow(unsigned int *al)
{
for(i=al[0];i>=1;i--)
{
fout<<al[i];
}
}
void imp(unsigned int* al,long long int d, unsigned int* cl)
{
long long int p=0;
for(i=al[0];i>=1;i--)
{
al[i]+=p;
p=al[i]%d;
cl[i]=al[i]/d;
p*=10;
}
for(i=al[0];cl[i]==0;i--);
cl[0]=i;
}
void add1(unsigned 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(unsigned 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);
for(i=a[0];i>=0;i--)
a[i]=0;
inm(b,c,a);
fshow(a);
return 0;
}