언어 자료구조 알고리즘/C언어 예제

큰 정수 사이의 덧셈, C언어 소스

언제나휴일 2016. 4. 3. 18:52
반응형

큰 정수 사이의 덧셈, C언어 소스



큰 수 사이의 덧셈.c

질문) 0~10^100 이내의 사이의 덧셈을 하려면 어떻게 해야 하나요?      int 형식으로 표현할 있는 범위가 넘는데 어떻게 해야 난감하네요.
)
12345678901234567890
20
12345678901234567910

 

답변)

정수를 입력받는다고 하였는데 C언어의 정수 형식의 표현 범위를 벗어나기 때문에 정수 형식의 변수로 입력받는 것이 아닙니다. 먼저 수를 입력받기 위해 char 배열을 사용합니다.
 
그리고 입력받은 개의 자리를 맞추기 쉽게 sprintf 앞자리는 0으로 채웁니다.
    printf("첫 번째 수:");

    scanf_s("%s", buf1, sizeof(buf1));

    sprintf_s(numstr1, sizeof(numstr1), "%0100s", buf1);

 

    printf("두 번째 수:");

    scanf_s("%s", buf2, sizeof(buf2));

    sprintf_s(numstr2, sizeof(numstr2), "%0100s", buf2);
 
 
끝자리부터 수를 더하여 결과 배열에 대입합니다. carry 발생하는지 확인해야 합니다.
그리고 10^100 이내의 수를 더하면 10^100 넘고 10^101보다 작은 수가 발생할 있으므로 결과를 보관할 배열은 크기를 102 합니다.(널문자와 캐리를 위해)
 
    for (i = 99; i >= 0; i--)

    {

        sum = (numstr1[i] - '0') + (numstr2[i] - '0') + carry;

        carry = sum / 10;

        sum = sum % 10;

        result[i + 1] = sum + '0';

    }
마지막 캐리를 결과 배열의 인덱스 0 설정합니다.
    result[0] = carry + '0'; 
출력하기 전에 처음으로 '0' 아닌 위치를 찾습니다.
    for (i = 0; result[i] == '0'; i++);
 
그리고 '0' 아닌 문자를 발견한 위치의 문자열을 출력합니다.

 
 
전체 코드는 다음과 같습니다.

//큰 수 사이의 덧셈

#include<stdio.h>

#include <string.h>

int main(void)

{

    char buf1[101];

    char buf2[101];

    char numstr1[101];

    char numstr2[101];

    char result[102] = "";

    int i;

    int sum, carry = 0;

 

    printf("첫 번째 수:");

    scanf_s("%s", buf1, sizeof(buf1));

    sprintf_s(numstr1, sizeof(numstr1), "%0100s", buf1);

 

    printf("두 번째 수:");

    scanf_s("%s", buf2, sizeof(buf2));

    sprintf_s(numstr2, sizeof(numstr2), "%0100s", buf2);

 

 

    for (i = 99; i >= 0; i--)

    {

        sum = (numstr1[i] - '0') + (numstr2[i] - '0') + carry;

        carry = sum / 10;

        sum = sum % 10;

        result[i + 1] = sum + '0';

    }

    result[0] = carry + '0';

 

    for (i = 0; result[i] == '0'; i++);

    printf("%s\n",buf1);

    printf("+\n");

    printf("%s \n", buf2);

    printf("= \n");

    printf("%s\n",result + i);

    printf("\n");

    return 0;

}

반응형