/*
 * ---------------------------
 *      무한 자리수 계산     *
 * ---------------------------
 */


#include <stdio.h>

#define CIPHER 20                  /* 자리수 */
#define N ((CIPHER-1)/4+1)     /* 배열크기 */

void ladd(short *,short *,short *);
void lsub(short *,short *,short *);
void print(short *);

int main(void)
{
    static short a[N+2]={1999,4444,7777,2222,9999},
                 b[N+2]={ 111,6666,3333,8888,1111},
                 c[N+2];

    ladd(a,b,c); print(c);
    lsub(a,b,c); print(c);

 return 0;
}
void ladd(short a[],short b[],short c[])    /* 긴 자리수 덧셈 */
{
    short i,cy=0;
    for (i=N-1;i>=0;i--){
        c[i]=a[i]+b[i]+cy;
        if (c[i]<10000)
            cy=0;
        else {
            c[i]=c[i]-10000;
            cy=1;
        }
    }
}
void lsub(short a[],short b[],short c[])  /* 긴 자리수 뺄셈 */
{
    short i,brrw=0;
    for (i=N-1;i>=0;i--){
        c[i]=a[i]-b[i]-brrw;
        if (c[i]>=0)
            brrw=0;
        else {
            c[i]=c[i]+10000;
            brrw=1;
        }
    }
}
void print(short c[])        /* 긴 자리수 출력 */
{
    short i;
    for (i=0;i<N;i++)
        printf("%04d ",c[i]);
    printf("\n");
}


// 긴 자리수의 덧셈, 뺄셈 : n자리의 수끼리 덧셈, 뺄셈을 수행한다.

a[]b[]의 하위자리수부터 각각 더하되 계산결과가 10000미만이면 그대로 c[]에 저장하고 10000

이상(네 자리를 넘을 경우)이면 결과 값에서 10000을 뺀 값을 저장하고, 네자리를 계산할 때

자리올림수 1을 더한다. 뺄셈도 같은 방법으로 수행하되 결과가 음수인 경우에는 10000을 더해서

c[]에 저장하고 네 자리를 계산할때 1을 뺀다.

+ Recent posts