Задача № 18 Посчитать факториал до 1000 (ACMP.RU)
Задание не проходит по 10 тесту, хотя 1000! считает правильно (проверил первые 20 знаков, сравнивая с Вольфрам Альфа). Второй день ищу ошибку и не могу найти
#include
int main(int argc, char *argv[])
{
unsigned long int a[6000] = { }, n, b[6000] = {
}, t;
freopen("INPUT.TXT", "r", stdin);
freopen("OUTPUT.TXT", "w", stdout);
scanf("%d", &n);
if (n < 0) {
printf("0");
return 0;
}
a[0] = 1;
for (int i = 1; i <= n; i++) {
for (int j = 0; j < 6000; j++) {
t = a[j] * i;
b[j] = b[j] + t % 100000;
b[j + 1] = b[j + 1] + t / 100000;
}
for (int j = 5999; j >= 0; j--) {
a[j] = b[j];
b[j] = 0;
}
}
int i = 5999;
while (a[i] == 0) {
i--;
if (a[i] != 0)
printf("%d", a[i]);
}
i--;
for (int j = i; j >= 0; j--) {
if (a[j] / 10000 == 0)
printf("0");
if (a[j] / 1000 == 0)
printf("0");
if (a[j] / 100 == 0)
printf("0");
if (a[j] / 10 == 0)
printf("0");
printf("%d", a[j]);
}
}
Заранее спасибо всем, кто откликнется.
Задачу решил с помощью Java из-за того, что в яве не нужно парится с длинной арифметикой.
Вот код:
import java.math.BigInteger;
import java.io.*;
import java.util.Scanner;
/**
*
* @author StalinZ
*/
public class Main {
public static void main(String[] args) throws FileNotFoundException {
new Main().run();
}
PrintWriter pw;
Scanner sc;
private void run() throws FileNotFoundException {
sc = new Scanner(new File("input.txt"));
int a=sc.nextInt();
pw = new PrintWriter(new File("output.txt"));
BigInteger ret =BigInteger.ONE ;
for (int i=1;i<=a;i++) ret = ret.multiply(ret.valueOf(i));
pw.print(ret.toString());
pw.close();
}
}
Правда я заметил, что ява жрёт больше памяти
Ответ
Только что решил задачку сам, проверил, получил accepted. Конкретно ваша программа, например, фейлится на тесте n = 999 и выводит один лишний ноль. Почему это происходит, подсказывать не буду, думаю вам самому интересно будет разобраться. Если что, то мое решение можно посмотреть на pastie.org
Комментариев нет:
Отправить комментарий