Страницы

Поиск по вопросам

среда, 12 декабря 2018 г.

Посчитать факториал до 1000

Задача № 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

Комментариев нет:

Отправить комментарий