This commit is contained in:
Tien
2019-11-17 15:06:20 +07:00
parent 2ffb7a19a4
commit d753ae2fdc
54 changed files with 899 additions and 0 deletions
+10
View File
@@ -0,0 +1,10 @@
all: main.o factorial.o readline.o
gcc main.o factorial.o readline.o -o myfactorial -lgmp
main.o: main.c factorial.h readline.h
gcc -c main.c
factorial.o: factorial.c factorial.h
gcc -c factorial.c
readline.o: readline.c readline.h
gcc -c readline.c
clean:
rm -f *.o myfactorial
+16
View File
@@ -0,0 +1,16 @@
#include "gmp.h"
#include "factorial.h"
#include <stdio.h>
#include <stdlib.h>
char *factorial(const int aNumber) {
int i;
mpz_t p;
mpz_init_set_ui(p, 1);
for (int i = 1; i <= aNumber; ++i) {
mpz_mul_ui(p, p, i);
}
char * ret = mpz_get_str(NULL, 10, p);
mpz_clear(p);
return ret;
}
+16
View File
@@ -0,0 +1,16 @@
#include "gmp.h"
#include "factorial.h"
#include <stdio.h>
#include <stdlib.h>
char *factorial(const int aNumber) {
int i;
mpz_t p;
mpz_init_set_ui(p, 1);
for (int i = 1; i <= aNumber; ++i) {
mpz_mul_ui(p, p, i);
}
char * ret = mpz_get_str(NULL, 10, p);
mpz_clear(p);
return ret;
}
+6
View File
@@ -0,0 +1,6 @@
#ifndef FACTORIAL_H
#define FACTORIAL_H
char *factorial(const int aNumber);
#endif
+28
View File
@@ -0,0 +1,28 @@
#include <stdio.h>
#include <stdlib.h>
#include "readline.h"
#include "factorial.h"
int main(int argc, char *argv[]) {
char *str = (char *) malloc(51);
int t = 0,
i = 0;
scanf("%d\n", &t);
while (i < t) {
if (read_line(str)) {
int a = atoi(str);
char *str = factorial(a);
if (t != NULL) {
puts(t);
free(t);
} else {
printf("Overflow!\n");
}
} else {
printf("%d\n", -1);
}
++i;
}
free(str);
return 0;
}
+17
View File
@@ -0,0 +1,17 @@
#include "readline.h"
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
int read_line(char *str) {
fgets(str, 51, stdin);
fputs(str, stdout);
int i = 0;
while (str[i] != '\n') {
if (!isdigit(str[i])) {
return 0;
}
++i;
}
return 1;
}
+6
View File
@@ -0,0 +1,6 @@
#ifndef READ_LINE_H
#define READ_LINE_H
int read_line(char *str);
#endif