#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <math.h>

#define MAX 10

#define POW_10_8 100000000

#define BLOCK_SIZE 8


void bigNumIns(int a[], char b[]);

void bigNumAdd(int left[], int right[], int result[]);

void bigNumSub(int left[], int right[], int result[]);

void isNumCheck(char ins[]);


void bigNumIns(int a[], char b[]) {

int i, j = strlen(b), h, x = 0, blockNum;


if (strlen(b) % BLOCK_SIZE == 0) blockNum = strlen(b) / BLOCK_SIZE;

else blockNum = strlen(b) / BLOCK_SIZE + 1;


for (h = blockNum; h > 0; h--) //h = int a[]에 8자리 단위로 넣기 위한 인덱스

{

for (i = 0; i < BLOCK_SIZE; i++) {

if (j == 0) break;

x += (b[j-1]-'0') * pow(10, i);

j--;

//printf("x = %d\n", x); //debug

}

a[h] = x;

x = 0; // x에다가 한 블럭의 정수를 저장한뒤 그다음 블럭에 저장하기전에 초기화

//printf("total = \n\n", a[h]); //debug

a[0]++; //블럭을 생성할때마다 a[0]에 1씩 추가, 블럭수를 의미함.

}

}


void isNumCheck(char ins[]) {

int i;

for (i = 0; i < strlen(ins); i++)

{

if (ins[i] < '0' || ins[i] > '9')

{

printf("정수를 입력해주세요");

//scanf("%d"); //debug

exit(0);

}

}

//printf("confirm"); //debug

}


void bigNumAdd(int left[], int right[], int result[]) {

int i, x=0, tmp; 


if (left[0] < right[0]) tmp = right[0];

else tmp = left[0];

for (i = tmp; i > 0; i--){

result[i] = (left[i] + right[i] + x) % POW_10_8;

x = (left[i] + right[i]) / POW_10_8;

if (i == 1 && x == 1) i++;

result[0]++;

//printf(" ", result[i]); //debug

}

}


void bigNumSub(int left[], int right[], int result[]) {

int i, x = 0, *tmp;


for (i = 0; i < left[0]; i++) {

if (left[i] > right[i]) break;

else if (left[i] < right[i]) {

tmp = right;

right = left;

left = tmp;

}

}


for (i = left[0]; i > 0; i--) {

if ((left[i] - right[i] - x) < 0) {

result[i] = (left[i] - right[i] - x) + POW_10_8;

x = 1;

}

else {

result[i] = (left[i] - right[i] - x);

x = 0;

}

result[0]++;

//printf(" ", result[i]); //debug

}


while (true) {

if (result[1] == 0) {

result[0]--;

for (i = 1; i <= result[0]; i++) {

result[i] = result[i + 1];

}

result[i] = 0;

}

else break;

}

}


int main(void) {

char ins[MAX * BLOCK_SIZE] = { 0, };

int num1[MAX] = { 0, },

num2[MAX] = { 0, },

numadd[MAX] = { 0, },

numsub[MAX] = { 0, };

int i;


printf("첫번째 정수를 입력하세요 : ");

scanf("%s", ins);

isNumCheck(ins);

bigNumIns(num1, ins);


printf("두번째 정수를 입력하세요 : ");

scanf("%s", ins);

isNumCheck(ins);

bigNumIns(num2, ins);


bigNumAdd(num1, num2, numadd);


printf("\n덧셈값 = %d", numadd[1]);

for (i = 1; i < numadd[0]; i++)

printf("d", numadd[i + 1]);


bigNumSub(num1, num2, numsub);


printf("\n뺄셈값 = %d", numsub[1]);

for (i = 1; i < numsub[0]; i++)

printf("d", numsub[i + 1]);


scanf("%d"); //debug

return 0;

}


부족한게 뭔지 알려줏ㅅ세여