int 형을 이용해서는 2의 31승 까지만 표현할 수 있습니다. Char 배열을 이용해서 이보다 더 큰 수를 계산해 봅시다. 예제는 2의 100승 입니다.

/* Written by rinehart@naver.com      */
/* 2009. 2. 9.                                   */
/* Tested on Windows, Cygwin, gcc  */

#include <stdio.h>

#define MAX (100)
#define TRUE    1
#define FALSE   0

int main()
{
    char    a_Result[MAX];
    int v_input = 0;
    int i = 0, j= 0; //Loop
    int b_first_non_zero = FALSE;   //To avoid straight Zero print out.

    memset (a_Result, 0x00, MAX);

    printf ("Input Power number : " );    // Get an input number
    scanf ("%d", &v_input);

    if (v_input > MAX || v_input < 0)    // input check
    {
        printf ("Wrong number\n");
        return 0;   //Quit program.
    }

    if (v_input >= 0)
    {
        a_Result[0] = 1;    // 2 power 0 is always 1. And Initialze a_Result.
    }

    //Calculation loop
    for (i = 0; i < v_input; i++)  
    {
        int v_temp = 0;
        int v_carry_before = 0;
        int v_carry_over = 0;

        for (j = 0; j < MAX-1; j++) //MAX -1 : to avoid overflow.
        {
            v_temp = a_Result[j];  
            v_temp = v_temp * 2;    // x2 to each digit.
            v_carry_before = v_carry_over;
            v_carry_over = 0;

            if (v_temp > 9)
            {
                v_carry_over = 1;
                v_temp -= 10;
            }

            a_Result[j] = v_temp +v_carry_before ;
            v_carry_before = 0;
        }
    }

    printf ("The Result of 2 power v_input is \n");    // Result print routine.

    for (i = MAX-1; i >= 0; i--)
    {
        if (a_Result[i] != 0)
        {
            b_first_non_zero = TRUE;
            printf("%d", a_Result[i]);
        }
        else if ((a_Result[i] == 0) && (b_first_non_zero == TRUE))
        {
            printf("%d", a_Result[i]);
        }
    }
   
    printf (".\n");

    return 0;
}

Posted by 지그프리드 지그프리드

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

  1. NoFATE
    2010.01.26 21:04
    댓글 주소 수정/삭제 댓글
    제가 찾던 자료네요..^^

    gcc 로 컴파일해서 입력을 해보니 잘 되더군요...

    그런데 백만단위에서는 잘 되는데 천만단위에서는

    실행이 되지 않고 세그먼테이션 오류를 일으키더군요...

    나름대로 필요한 부분이라서....ㅎ 왜 그런지 궁금합니다....

    답변부탁드려도 될까요?
    • 2010.01.28 09:38 신고
      댓글 주소 수정/삭제
      천만단위라면 어떤걸 천만단위를 입력하셨다는 거지요? input 값을 알려주시면 테스트 해보겠습니다.제가 테스트할 때는 2의 100승까지 문제가 없었던 것 같은데...

      코드 맨 위에 MAX 값을 늘려보는 것도 방법입니다.


BLOG main image
일상, 프로그래밍, IT 그리고 직장생활, Dive, 여행 by 지그프리드

카테고리

Class List (402)
Studies (30)
Exercise & Quizz (10)
Term Project (0)
ECIM list (Help!) (10)
Issues & News (0)
Gossip about IT & Job (22)
Tools (2)
Think about the Justice (23)
Book Review (170)
조엘 온 소프트웨어(번역) (28)
Diary (87)
Vacations (9)
Clash of clans 클래시 오브.. (11)

글 보관함

달력

«   2020/07   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
Total : 320,917
Today : 16 Yesterday : 45