Name: Anonymous 2011-06-15 22:03
This works on 32-bit x86 Linux with gcc as long as you don't enable optimization.
#include <stdio.h>
#include <stdlib.h>
static void factorial(int in, int *out) {
*(&in-1)-=5-5*(1/in);
*out*=in--;
}
int main(int argc, char **argv) {
int result=1;
int number=0;
if(argc!=2) {
exit(1);
}
number=atoi(argv[1]);
if(number<1) {
exit(2);
}
factorial(number, &result);
printf("%d! = %d\n", number, result);
return 0;
}
$ ./factorial 3
3! = 6
$ ./factorial 5
5! = 120
#include <stdio.h>
#include <stdlib.h>
static void factorial(int in, int *out) {
*(&in-1)-=5-5*(1/in);
*out*=in--;
}
int main(int argc, char **argv) {
int result=1;
int number=0;
if(argc!=2) {
exit(1);
}
number=atoi(argv[1]);
if(number<1) {
exit(2);
}
factorial(number, &result);
printf("%d! = %d\n", number, result);
return 0;
}
$ ./factorial 3
3! = 6
$ ./factorial 5
5! = 120