프로그래밍

 3198, 1/160 회원가입  로그인  
   Lunatie
   배열을 이용한 긴자리수 덧셈뺄셈질문입니다.

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3418 [복사]


#include <stdio.h>
#define DIGIT 20
#define SIZE (DIGIT/4 + 1)

void ladd(short [], short [], short [], int);
void lsub(short [], short [], short [], short [], int);
void printArray(short [], int);

void main(void)
{  
//1번 결과를 테스트 하기 위한 입력 데이터
//        short a[SIZE] = {1234, 5678, 9012, 3456,1234};
//        short b[SIZE] = {999,5432,109, 8765, 4321};
//        2번 결과를 테스트 하기 위한 입력 데이터
//        short a[SIZE] = {9999,5432,109, 8765, 4321};
//        short b[SIZE] = {1234, 5678, 9012, 3456,1234};
//        3번 결과를 테스트 하기 위한 입력 데이터
//        short a[SIZE] = {1234, 5678, 9012, 3456,1234};
//        short b[SIZE] = {9999,5432,109, 8765, 4321};
//        4번 결과를 테스트 하기 위한 입력 데이터
//        short b[SIZE] = {9012, 3456,1234};
//        short a[SIZE] = {5432,109, 8765, 4321};
//        short c[SIZE];
//        short l[SIZE] = {0,0,0,0,0,0};

        printf("A: ");
        printArray(a, SIZE);
        printf("\n+");
        printf("\nB: ");
        printArray(b, SIZE);
        printf("\n\n=  ");
        ladd(a,b,c,SIZE);
        printArray(c,SIZE);
        printf("\n\n\n");
        printf("A: ");
        printArray(a, SIZE);
        printf("\n-");
        printf("\nB: ");
        printArray(b, SIZE);
        printf("\n\n=  ");
        lsub(a,b,c,l,SIZE);
        printArray(c,SIZE);
                if (l[0] != 0)
          printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b-");
        printf("\n");
        
}

void ladd(short a[], short b[], short c[],int n)
{
        int u=0;

    for (n = SIZE-1 ; n>=0; n--)
          {   c[n] = a[n] + b[n] + u;
          
                  if(c[n] < 10000)
                 u = 0;
              else {
                 c[n] = c[n] - 10000;
                 u = 1;
                   }
      }
        if(a[0] + b[0] >=10000)
                ++c[5];
}

void lsub(short a[], short b[], short c[],short l[], int n)
{
        int d = 0;
        
    
        
        if(a[0] < b[0]) {
                for(n=0;n<=5;n++)
                 {  l[n] = a[n];
                    a[n] = b[n];
                        b[n] = l[n];
             }
        
        }
                        
    for (n = SIZE-1; n>=0; n--) {
        c[n] = a[n] - b[n] - d;
        
        if (c[n] >= 0)
            d = 0;
        else {
            c[n] = c[n] + 10000;
            d = 1;
             }
                                }

}

void printArray(short a[], int n)
{    
         if(a[5] != 0)
          printf("%4d ",a[5]);
         else
      printf("     ");
          
         for (n=0; n< SIZE-1 ; n++){
         if(n==0)
                  printf("%4d ",a[n]);
                 else
                  printf("%04d ",a[n]);
         }
        
}
이게 일단 짠 코드입니다. 이 내용에서는 코드에서 보든 1~3번 테스트까지만 가능합니다..
그..런..데.. 4번 테스트..
자릿수가 다를 경우에는 이 코드.. 쓰레기죠.. 오류나고....ㅠ
범용성 있게 만드려면 어디를 수정해야할까요..

  Hit : 6015     Date : 2012/05/19 11:02