Pagini recente » Cod sursa (job #2445241) | Cod sursa (job #1248947) | Cod sursa (job #1482645) | Cod sursa (job #2148084) | Cod sursa (job #1702395)
#include <fstream>
#include <cstring>
#define MMAX 1000005
#define NMAX 200005
#define BASE 100000
using namespace std;
ifstream f("next.in");
ofstream g("next.out");
int a[NMAX] , sol[NMAX] , aux[3];
int n;
char sir[MMAX];
long long nmb;
void adun(int a[] , int b[]);
void inmult(int a[] , int b[] , long long c);
void afis(int a[]);
long long divide(int a[] , long long b);
int main() {
f >> sir;
n = strlen(sir);
for(int i = n - 1 ; i >= 0 ; i -= 5) {
int nr = 0 , pw = 1;
for(int j = 0 ; j < 5 && i - j >= 0; ++j) {
nr = nr + (sir[i - j] - '0') * pw;
pw *= 10;
}
a[++a[0]] = nr;
}
f >> nmb;
aux[1] = 1;
aux[0] = 1;
long long rest = divide(a , nmb);
if(rest == 0) {
inmult(sol , a , nmb);
afis(sol);
return 0;
}
adun(a , aux);
inmult(sol , a , nmb);
afis(sol);
return 0;
}
void adun(int a[] , int b[]) {
int t = 0;
a[0] = max(a[0] , b[0]);
for(int i = 1 ; i <= a[0] ; ++i) {
a[i] = a[i] + b[i] + t;
t = a[i] / BASE;
a[i] %= BASE;
}
while(t) {
a[++a[0]] = t % BASE;
t /= BASE;
}
}
void inmult(int a[] , int b[] , long long c) {
long long t = 0;
memset(a , 0 , sizeof(a));
a[0] = b[0];
for(int i = 1 ; i <= a[0] ; ++i) {
long long aux = (long long) b[i] * (long long)c + t;
t = aux / BASE;
a[i] = aux % BASE;
}
while(t) {
a[++a[0]] = t % BASE;
t /= BASE;
}
}
void afis(int a[]) {
for(int i = a[0] ; i >= 1 ; --i) {
int aux = a[i] , nrc = 0;
while(aux) {
++nrc;
aux /= 10;
}
if(i != a[0]) {
for(int j = nrc + 1 ; j <= 5 ; ++j) {
g << 0;
}
}
g << a[i];
}
}
long long divide(int a[] , long long b) {
long long R = 0;
for(int i = a[0] ; i > 0 ; i--) {
R = BASE * R + a[i];
a[i] = R / b;
R %= b;
}
while (!a[a[0]] && a[0] > 1)
a[0]--;
return R;
}