#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;
}
부족한게 뭔지 알려줏ㅅ세여
함수를 만들거라..
좀더잘나눠봐