//시스템 소프트웨어 수678
//0~10진수 덧셈
#include<stdio.h>
#include<stdlib.h>
/////////////////////////////////////거듭제곱함수/////////////////////////////////////////
int multiple(int num, int n)
{
int result=1;
for(n=n ; n >0 ; n--)
{ result *=num; }
return result; //result = num^n
};
//////////////////////////////////////////////////////////////////////////////////////////
int main()
{
int i,j, //i = 횡열(↓) j = 종열(→)
a,n, //a = i+j
jinsu, //진수
jinsu_n, //진수^n 거듭제곱
input1, input2, //입력받는 수 1, 입력받는 수 2
**table; //입력받는수 1과 2에 맞게 2차원 배열 테이블을 만들기위한 포인터
////////////////////////////////진수와 숫자1,2 입력.///////////////////////////////////////////
while(1)
{ printf("몇진수의 덧셈을 합니까?\njinsu : ");
scanf_s("%d",&jinsu);
if(jinsu > 0 && jinsu <=10) //10진수 이하만 입력 가능.
{
printf("더할 숫자를 입력하세요(10진수)\ninput1:"); //10진수의 숫자로 더할 숫자 2개를 입력.
scanf_s("%d",&input1);printf("input2:");
scanf_s("%d",&input2);
break; //입력 후, 무한 반복루트 탈출.
}
printf("1~10만 입력 가능합니다.\n"); //1~10진수 이외의 진수를 입력했을시
} //경고 후, 반복루프 재수행.
/////////////////////////////2차원배열 테이블의 동적 메모리 할당.////////////////////////////////
table = (int **)malloc(sizeof(int)*(input1+1));
for(i=0; i <= input1; i++)
{ table[i] = (int *)malloc(sizeof(int)*(input2+1)); }
/////////////////////////////////////////테이블/////////////////////////////////////////////////
printf("i\j"); // 좌측 상단의 표시.
for(j=0; j<=input2;j++)
{ printf(" ┃%d",j); } // 상단에 j 종열을 출력. 1~input2 까지.
for(i=0 ; i <=input1 ; i++)
{
for(j=0 ; j <= input2;j++)
{
a=i+j; table[i][j]=0; //table[i][j]의 초기화.
for(n=10 ; n>=0; n--)
{
jinsu_n=multiple(jinsu, n); //jinsu_n = jinsu의 n 거듭제곱 초기화
if(a/jinsu_n >= 1) //a=i+j를 jinsu_n으로 나눈 값이 1이상이면 값을 table[i][j]에 대입.
{ table[i][j]+= (a/jinsu_n)*multiple(10,n); }
a=a%jinsu_n; //나머지를 a에 대입.
}
}
printf("\n《i%d》 ",i); //좌측에 i 횡열을 출력.
for(j=0; j <= input2; j++) //table[i][j]의 j=0~input2 까지 출력후, 줄바꿈.
{ printf("┃%d ",table[i][j],j); }
}
/////////////////////////////////////////결과 값 출력/////////////////////////////////////////////////
printf("\n\n%d+%d=%d(%d)\n",input1,input2,table[input1][input2],jinsu);
return 0;
}