Pagini recente » Cod sursa (job #874482) | Cod sursa (job #1128456) | Cod sursa (job #3176155) | Cod sursa (job #496860) | Cod sursa (job #581720)
Cod sursa(job #581720)
#include <cstdio>
#include <cstdlib>
#include <cstring>
class big {
int size;
char digits[100];
public:
big() {
digits[0] = 0;
size = 1;
}
bool notone() {
if (size != 1) {
return(1);
}
return(digits[0] != 1);
}
void operator = (char * value) {
size = strlen(value);
for (int i = 0; i < size; ++i) {
digits[i] = value[i] - '0';
}
}
void operator /= (int value) {
char old[100];
int last = size;
int current = 0;
int temporary = 0;
size = 0;
memcpy(&old, &digits, 100);
while (temporary < value) {
temporary = temporary * 10 + old[current++];
if (current == last) {
if (temporary < value) {
digits[size++] = 0;
return;
}
}
}
digits[size++] = (char)(temporary / value);
temporary %= value;
while (current < last) {
temporary = temporary * 10 + old[current++];
digits[size++] = (char)(temporary / value);
temporary %= value;
}
}
int operator % (int value) {
int current = 0;
int temporary = 0;
while (temporary < value) {
temporary = temporary * 10 + digits[current++];
if (current == size) {
return(temporary % value);
}
}
temporary %= value;
while (current < size) {
temporary = temporary * 10 + digits[current++];
temporary %= value;
}
return(temporary);
}
void print() {
for (int i = 0; i < size; ++i) {
printf("%hhd", digits[i]);
}
}
};
void test(big num, int div) {
int power = 0;
while (num.notone()) {
if (num % div != 0) {
return;
}
num /= div;
++power;
}
FILE * fout = fopen("numere2.out", "wt");
fprintf(fout, "%d\n%d\n", div, power);
fclose(fout);
exit(0);
}
char loadnum[100];
big number;
int main() {
char * readnum = loadnum;
FILE * fin = fopen("numere2.in", "rt");
fscanf(fin, "%s", readnum);
number = readnum;
fclose(fin);
int add = (int)(number % 2 != 0) + 1;
int div = add + 1;
while (1) {
if (number % div == 0) {
test(number, div);
}
div += add;
}
}