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;
}
/* 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;
}
'ECIM list (Help!)' 카테고리의 다른 글
C언어 재귀함수로 삼각형 그리기 - 재귀함수 연습 (0) | 2015.08.30 |
---|---|
피보나치 수열 비재귀방법으로 풀기 - Fibonacci number without recursion (0) | 2015.08.30 |
배열 구조체를 이용한 성적출력 - 버블소팅 예제 (Bubble soring example) (0) | 2009.02.10 |
Find next biggest binary number : 다음으로 큰 2진수 찾기 (3) | 2009.02.10 |
씨언어에서 (c++아님) x,y의 좌표가 주어졌을때 각도 구하는 법 (0) | 2008.08.10 |