c·c++/c 프로그래밍

10000팩토리얼 구하기

바로이순간 2012. 3. 23. 02:13

#include <stdio.h>
void mult(int big[], int n) {  // big[0] 에는 다음에 나오는 셀의 갯수가 있다. 만진법이다.
    int i;
    for(i=1;i<=big[0];i+=1) {
        big[i]=n*big[i];
    }
    for(i=1;i<=big[0];i+=1) {
        big[i+1]=big[i+1]+big[i]/10000;
        big[i]=big[i]%10000;
    }
    if(big[i]) big[0]=i;
    //printf("%d %d %d %d\n",big[0],big[1],big[2],big[3]);
}
 
int main() {
    int i, n;
    int fac[10001]={1, 1, 0,}; // 10000셀의 정수 십진수 40000 자리까지 나타낸다.
                                                //  10000 팩토리얼 까지 구할수 있다.
    printf("number: ");
    scanf("%d", &n);
 
    for(i=1;i<=n;i+=1) mult(fac, i);
    printf("%4d ",fac[fac[0]]);
    for(i=fac[0]-1; i>0; i-=1) printf("%04d ",fac[i]);
    printf("  ##%d", fac[0]);

    return 0;
}


=====================================================================

연숙해서 팩토리얼 출력하기


#include <stdio.h>

void mult(int big[], int n) {  // big[0] 에는 다음에 나오는 셀의 갯수가 있다. 만진법이다.

    int i;

    for(i=1;i<=big[0];i+=1) {

        big[i]=n*big[i];

    }

    for(i=1;i<=big[0];i+=1) {

        big[i+1]=big[i+1]+big[i]/10000;

        big[i]=big[i]%10000;

    }

    if(big[i]) big[0]=i;

    //printf("%d %d %d %d\n",big[0],big[1],big[2],big[3]);

}

 

int main() {

    int i, j, n;

    int fac[10001]={1, 1, 0,}; // 10000셀의 정수 십진수 40000 자리까지 나타낸다.

                                                //  10000 팩토리얼 까지 구할수 있다.

    printf("number: ");

    scanf("%d", &n);

 

    for(i=1;i<=n;i+=1) {

        mult(fac, i);

        printf("%3d! = %d",i,fac[fac[0]]);

        for(j=fac[0]-1; j>0; j-=1) printf("%04d",fac[j]);

        printf("\n");

    }

    return 0;

}



'c·c++ > c 프로그래밍' 카테고리의 다른 글

하노이탑 이해하기  (0) 2012.03.24
동적할당 행렬의 곱셈  (0) 2012.03.24
bit field로 2진수 출력하기  (0) 2012.03.22
순환호출과 반복문  (0) 2012.03.22
파일을 메모리에 모두 읽어들이자.  (0) 2012.03.22