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

큰 정수의 곱셉

바로이순간 2013. 5. 31. 09:34

#include <string.h>

#define MAX 1000

// 0번째 칸에는 자리수를 저장합니다.

// 1번째 칸에는 1의 자리, 2번째 칸에는 10의 자리, 3번째 칸에는 100의 자리

// ... 등을 저장합니다. 최대 999자리까지 출력이 가능합니다.

int result[MAX]={0,}; // 결과

int mult1[MAX]={0,};  // 피승수

int mult2[MAX]={0,};  // 승수

void multiply() {

    int i, j, x;

    for(i=1;i<=mult2[0];i+=1) {  // 승수의 각 자리로

        for(j=1;j<=mult1[0];j+=1) { // 피승수의 각자리를 곱합니다.

            result[i+j-1]+=mult2[i]*mult1[j]; // 결과에 더해줍니다.

            x=result[i+j-1];           // 값이 9보다 크면 윗자리로 올라갑니다.

            result[i+j-1]=x%10;     // 제자리의 수만 남고

            result[i+j]+=x/10;        // 윗자리로 올라갑니다.

        }

    }

    result[0]=mult1[0]+mult2[0];   // 결과의 자리수를 구합니다.

    if(result[result[0]]==0) { result[0]-=1; }

}

// 출력은 다시 큰 수 부터 출력해 준다.

void printResult() {

    int i, x;

    x=result[0];

    for(i=0;i<x;i+=1) {

        printf("%d", result[x-i]);

    }

    printf("\n");

}

int main() {

    char m1[100];

    char m2[100];

    int i, x;


    printf("입력1: ");

    scanf("%s", m1);

    printf("입력2: ");

    scanf("%s", m2);


    // 입력된 수를 뒤집어 준다.

    x=strlen(m1);

    for(i=0;i<x;i+=1) {

        mult1[x-i]=m1[i]-'0';

    }

    mult1[0]=x;

    x=strlen(m2);

    for(i=0;i<x;i+=1) {

        mult2[x-i]=m2[i]-'0';

    }

    mult2[0]=x;


    // 곱해준다.

    multiply();

    // 결과를 출력해 준다.

    printResult();


    return 0;

}


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

소수점이 포함된 진법변환  (0) 2013.05.31
2진수를 10진수로 바꾸기  (0) 2013.05.31
2의 누승구하기  (0) 2013.05.31
if없는 지그재그 출력  (0) 2013.05.29
카운터 프로그램  (0) 2013.05.29