#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번 테스트..
자릿수가 다를 경우에는 이 코드.. 쓰레기죠.. 오류나고....ㅠ
범용성 있게 만드려면 어디를 수정해야할까요.. |