Pagini recente » Cod sursa (job #1768078) | Cod sursa (job #2459699) | Autentificare | Cod sursa (job #471184) | Cod sursa (job #314640)
Cod sursa(job #314640)
#include <stdio.h>
#include <string.h>
#define N 1000005
char s[N];
int v[N],r;
long long d;
void citire()
{
int t;
fgets(s+1,N,stdin);
t=(int)strlen(s+1);
int i;
for (i=t; i>=1; i--)
{
if ((s[i]-'0')>=0 && (s[i]-'0')<=9)
v[++r]=s[i]-'0';
}
v[0]=t;
scanf("%lld",&d);
}
long long mod(int A[],long long B)
{
int i;
long long t = 0;
for (i = A[0]; i > 0; i--)
t = (t * 10 + A[i]) % B;
return t;
}
void mul(int A[], long long B)
{
int i;
long long t = 0;
for (i = 1; i <= A[0] || t; i++, t /= 10)
A[i] = (t += A[i] * B) % 10;
A[0] = i - 1;
}
void div(int A[], long long B)
{
int i;
long long t = 0;
for (i = A[0]; i > 0; i--, t %= B)
A[i] = (t = t * 10 + A[i]) / B;
for (; A[0] > 1 && !A[A[0]]; A[0]--);
}
void rezolva()
{
int i,q,q_ant;
if (mod(v,d)==0)
printf("%s\n",s+1);
else
{
div(v,d);
q=(v[1]+1)/10;
v[1]=(v[1]+1)%10;
q_ant=q;
for (i=2; i<=v[0] || q; i++)
{
q=(v[i]+q)/10;
v[i]=(v[i]+q_ant)%10;
q_ant=q;
if (i==v[0]+1)
{
v[0]+=1;
break;
}
}
mul(v,d);
for (int i=v[0]; i>=1; i--)
printf("%d",v[i]);
}
}
int main()
{
freopen("next.in","r",stdin);
freopen("next.out","w",stdout);
citire();
rezolva();
return 0;
}