2진수의 사칙연산을 하나하나 과정까지 다 표현할 수 있는 코딩 예시를 구할 수 있을까요?

julley123의 이미지

2진수의 사칙연산을 하나하나 과정까지 다 표현할 수 있는 코딩 예시를 구할 수 있을까요?

julley123의 이미지

#include
#include
int change(int number, char word[])//평범한 2진수 변화
{
int i=0, j=0;


for (i=0; number >0; i++)
{
word[i]=(number % 2)+48;
number/=2;

}


return i-1;

}

void change2(char word[],int max)//자리 바꾸기
{
int i=max+1, j=max;
char temp;

for(j=0; j < i/2; j++)
{
temp=word[j];
word[j]=word[i-j-1];
word[i-j-1]=temp;
}
}
void change3(int number, char word[], int max) //1의 보수 변화
{
int i=0, j=0;

for(i=0; i!=max; i++)
{
if (word[i]=='0')
word[i]='1';
else if (word[i]=='1')
word[i]='0';
}

word[0]=(int)word[0]+49;

if (word[0]==98)
{
word[0]='0';
j=j+1;

while(1)
{
word[j]=(int)word[j]+49;

if(word[j]==98)
{
word[j]='0';
j++;
continue;
}
else if(word[j]==49)
break;

}
}
else
word[0]='1';

word[max]='1';
}

void change4(char M[], int max1, char Q[], int max2, int bit, char UNM[], char A[])
{
int i=0;
if (max1+1!=bit)
{
M[bit+1]='\0';
UNM[bit+1]='\0';
}
else
{
M[max1+2]='\0';
UNM[max1+2]='\0';
}

if(max2+1 != bit)
{

Q[bit+1]='\0';
}
else
Q[max2+2]='\0';

for(i=0; i!=bit+1; i++)
A[i]='0';

A[i]='\0';


}

void set(char A[], int max, char M[], char Q[], int max1, int max2)
{
int i=0 , j=0;

for(i=0; max+1!=i ;i++)
A[i]=48;

A[i]='\0';
M[max1+1]='\0';
Q[max2+1]='\0';

}

void firstset(char M[], char Q[])
{
int i=0;
for(i=0; i!=99; i++)
{
M[i]='0';
Q[i]='0';
}

M[i]='\0';
Q[i]='\0';
}

void process1(char A[], char M[], char *C, int max, int max2, char Q[], int *CNT)
{
int i=0, j=0,d=0;

for(i=max ; i+1 !=0 && d!=max2+1; i--, d++)
{
A[i]=(int)A[i]+(int)M[max2-d]; //A[i]의 자리 + M[i]

if(A[i]==98) //A[i]=1+1=0 올림 발동
{
A[i]='0';
j=i-1; //올림을 하기 위한 임시 변수
while(1) //이 와일문이 위로 올라가야 할거 같다 다 끝난 후 수정하자 그럼 if문이 반 정도 줄을거다.
{

if(j!=-1) // j=i-1이다 고로 -1은 최소 자리를 초과했다는 소리다
A[j]=(int)A[j]+49; //하지만 아니므로 더한다 a[j]+1
else if(j==-1) //j=-1즉 다음 자리는 마지막을 초과했다는 소리
{
*C='1'; //오버플로 적용
A[i]='0'; //1+1=0
break; //와일문을 끝내고 바로 아래로 내려간다.
}

if(A[j]==98) //98= 1+1=0 즉 올림
{
A[j]='0';
j--;
continue;
}
else if(A[j]==97) //올린 후 1 오름 없음
{
A[j]='1';
break;
}

break;
}
}
else if(A[i]==97)
A[i]='1';
else
A[i]='0';
}

printf("%2d %c %s %s %s A=A+M\n",*CNT, *C, A, Q, M);

}

void process2(char A[], char M[], int max, char Q[], int CNT, char M2[], char word[])
{
int i=0, j=0, d=0;

for(i=max ; i+1 !=0 && d!=max+1; i--, d++)
{
word[i]=(int)A[i]+(int)M[max-d]; //A[i]의 자리 + M[i]

if(word[i]==98) //A[i]=1+1=0 올림 발동
{
word[i]='0';
j=i-1; //올림을 하기 위한 임시 변수
while(1) //이 와일문이 위로 올라가야 할거 같다 다 끝난 후 수정하자 그럼 if문이 반 정도 줄을거다.
{

if(j!=-1) // j=i-1이다 고로 -1은 최소 자리를 초과했다는 소리다
word[j]=(int)word[j]+49; //하지만 아니므로 더한다 a[j]+1
else if(j==-1) //j=-1즉 다음 자리는 마지막을 초과했다는 소리
{
word[i]='0'; //1+1=0
break; //와일문을 끝내고 바로 아래로 내려간다.
}

if(word[j]==98) //98= 1+1=0 즉 올림
{
word[j]='0';
j--;
continue;
}
else if(word[j]==97) //올린 후 1 오름 없음
{
word[j]='1';
break;
}

break;
}
}
else if(word[i]==97)
word[i]='1';
else
word[i]='0';
}


}

void process3(char A[], char M[], int max, char Q[], int CNT, char M2[], char word2[])
{
int i=0, j=0, d=0;
char word[100];

strcpy(word, A);

for(i=max ; i+1 !=0 && d!=max+1; i--, d++)
{
word[i]=(int)word[i]+(int)M[max-d]; //A[i]의 자리 + M[i]

if(word[i]==98) //A[i]=1+1=0 올림 발동
{
word[i]='0';
j=i-1; //올림을 하기 위한 임시 변수
while(1) //이 와일문이 위로 올라가야 할거 같다 다 끝난 후 수정하자 그럼 if문이 반 정도 줄을거다.
{

if(j!=-1) // j=i-1이다 고로 -1은 최소 자리를 초과했다는 소리다
word[j]=(int)word[j]+49; //하지만 아니므로 더한다 a[j]+1
else if(j==-1) //j=-1즉 다음 자리는 마지막을 초과했다는 소리
{
word[i]='0'; //1+1=0
break; //와일문을 끝내고 바로 아래로 내려간다.
}

if(word[j]==98) //98= 1+1=0 즉 올림
{
word[j]='0';
j--;
continue;
}
else if(word[j]==97) //올린 후 1 오름 없음
{
word[j]='1';
break;
}

break;
}
}
else if(word[i]==97)
word[i]='1';
else
word[i]='0';
}

strcpy(word2, word);
}

void Rightshift(char *C, char A[], char Q[], int *CNT, int max1, int max2, char M[])
{
int i=0;

for(i=max1; i!=0; i--)
{
Q[i]=Q[i-1];
}

Q[0]=A[max2];

for(i=max2; i!=0; i--)
{
A[i]=A[i-1];
}

A[0]=*C;

*C='0';
(*CNT)--;

printf("%2d %c %s %s %s Right Shift & CNT-1\n",*CNT, *C, A, Q, M);

}

void Arith_Rightshift(char *Q1, char A[], char Q[], int *CNT, int bit, char M[])
{
int i=0;

*Q1=Q[bit];
for(i=bit; i!=0; i--)
{
Q[i]=Q[i-1];
}

Q[0]=A[bit];

for(i=bit; i!=0; i--)
{
A[i]=A[i-1];
}


(*CNT)--;

printf("%2d %s %s %c %s ArithmeticRight Shift & CNT-1\n",*CNT, A, Q, *Q1, M);

}

void Leftshift(char A[], char Q[], int CNT, int max2, int bit, char M[])
{
int i=0;

for(i=0; i!=bit; i++)
{
A[i]=A[i+1];
}

A[i]=Q[0];

for(i=0; i!=max2; i++)
{
Q[i]=Q[i+1];
}

Q[i]='0';

}

void unload(char word2[], char word[], int max, int flag)
{
int i=0, j=max;

word[max]=(int)word[max]+49;

if (word[max]==97)
{
word[max]='1';
j=j-1;

while(1)
{
word[j]=(int)word[j]+49;

if(word[j]==97)
{
word[j]='1';

if(j==0)
{
if(flag==1)
return;
else
{
flag=1;
unload(word2, word2, max, flag);
break;
}
}
else
{
j--;
continue;
}
}
else if(word[j]==98)
{
word[j]='0';
break;
}

}
}
else
{
word[max]='0';

if(flag==1)
return;
}

for(i=0; i!=max+1; i++)
{
if (word[i]=='0')
word[i]='1';
else if (word[i]=='1')
word[i]='0';
}

for(i=0; i!=max+1; i++)
{
if (word2[i]=='0')
word2[i]='1';
else if (word2[i]=='1')
word2[i]='0';
}


}

void result(char A[], char Q[], int bit, int max2, int boo)
{
int i=0, number=1, result=0;

for(i=max2; i+1!=0; i--)
{
if(Q[i]=='1')
{
result=result+number;
number=number*2;
}
else
number=number*2;
}

for(i=bit; i+1!=0; i--)
{
if(A[i]=='1')
{
result=result+number;
number=number*2;
}
else
number=number*2;
}

printf("%d",result);

}

void result2(char A[], char Q[], int bit, int max2, int boo)
{
int i=0, number=1, result=0, quotient=0;

for(i=max2; i+1!=0; i--)
{
if(Q[i]=='1')
{
quotient= quotient+number;
number=number*2;
}
else
number=number*2;
}

number=1;

for(i=bit; i+1!=0; i--)
{
if(A[i]=='1')
{
result=result+number;
number=number*2;
}
else
number=number*2;
}

printf("\n결과: 몫=%s=%d 나머지=%s=%d",Q, quotient*boo, A, result);

}

void multiplication(int multiplicand, int multiplier)
{
int i, CNT=0, max1, max2, bit;
char C='0', A[10000], M[10000], Q[10000];

max1=change(multiplicand, M);
max2=change(multiplier, Q);

if(max1 >= max2)
bit=max1;
else
bit=max2;

CNT=max2+1;


set(A, bit, M, Q, max1, max2);

change2(M, max1);
change2(Q, max2);

printf("CNT C");
for(i=0; bit/2>=i;i++)
printf(" ");
printf("A");
for(i=0; bit/2>=i;i++)
printf(" ");
for(i=0; max2/2>=i;i++)
printf(" ");
printf("Q");
for(i=0; max2/2>=i;i++)
printf(" ");
for(i=0; max1/2>=i;i++)
printf(" ");
printf("M");
for(i=0; max1/2>=i;i++)
printf(" ");
printf(" 동작 상태\n");

printf("%2d %c %s %s %s\n",CNT, C, A, Q, M);

while(CNT!=0)
{


if(Q[max2]=='1')
{
process1(A, M, &C, bit, max1, Q, &CNT);
Rightshift(&C, A, Q, &CNT, max2, bit, M);
}
else
Rightshift(&C, A, Q, &CNT, max2, bit, M);

}

printf("\n결과: %s%s = ", A,Q);

result(A, Q, bit, max2, 1);
}

void multiplication2(int multiplicand, int multiplier)
{
char A[100], Q[100], Q1='0', M[100], UNM[100];
int max1, max2, bit, CNT;
int temp, i=0, flag=0 ;

firstset(M, Q);

if(multiplicand < 0) //M의 변화
{
temp=multiplicand*-1;
max1=change(temp, M);
strcpy(UNM, M); //UNM=-M

}
else
{
temp=multiplicand;
max1=change(temp, M);
}

if(multiplier < 0) //Q의 변화
{
temp=multiplier * -1;
max2=change(temp, Q);

}
else
{
temp=multiplier;
max2=change(temp, Q);
}


if (max1 > max2) //여기서 일단 비트 수를 계산한다.
bit=max1+1;
else
bit=max2+1;

if(multiplicand < 0) //최대 비트수가 계산되었으면 다시 자리마다 비트를 넣어준다.
{ //예를들어 111(5비트)->11001이 된다 그전에는 1001만 되었다.
temp=multiplicand*-1;
change3(temp, M, bit);
}
else
{
strcpy(UNM, M); //M의 0보다 클 때 이므로 UNM을 여기서 해줌
temp=multiplicand;
change3(temp, UNM, bit);
}

CNT=bit+1;

if(multiplier < 0)
{
temp=multiplier*-1;
change3(temp, Q, bit);
}

change4(M, max1, Q, max2, bit, UNM, A);

change2(M, bit);
change2(Q, bit);
change2(UNM, bit);

printf("CNT");
for(i=0; bit/2>=i;i++)
printf(" ");
printf("A");
for(i=0; bit/2>i;i++)
printf(" ");
for(i=0; bit/2>i;i++)
printf(" ");
printf("Q");
for(i=0; bit/2>i;i++)
printf(" ");

printf(" Q1 ");
for(i=0; bit/2>i;i++)
printf(" ");
printf("M");
for(i=0; max1/2>=i;i++)
printf(" ");
printf(" 동작 상태\n");

printf("%2d %s %s %c %s\n",CNT, A, Q,Q1, M);

while(CNT!=0)
{

if(Q[bit]=='0' && Q1=='1')
{

process2(A, M, bit, Q, CNT, M, A);
printf("%2d %s %s %c %s A=A+M\n",CNT, A, Q, Q1, M);
Arith_Rightshift(&Q1, A, Q, &CNT, bit, M);
}
else if(Q[bit]=='1' && Q1=='0')
{
process2(A, UNM, bit, Q, CNT, M, A);
printf("%2d %s %s %c %s A=A-M\n",CNT, A, Q, Q1, M);
Arith_Rightshift(&Q1, A, Q, &CNT, bit, M);
}
else
{
Arith_Rightshift(&Q1, A, Q, &CNT, bit, M);
}
}

printf("\n결과: %s%s = ", A,Q);

if(A[0]=='1')
{
unload(A, Q, bit, flag);
result(A, Q, bit, bit, -1);
}
else
result(A, Q, bit, bit, 1);


}

void multiplication3(int multiplicand, int multiplier)
{

int i, CNT=0, max1, max2, bit;
char A[100], M[100], Q[100], UNM[100];

firstset(M, Q);

max1=change(multiplicand, M);
max2=change(multiplier, Q);

max1++;

CNT=max2+1;

if(max1 > max2)
bit=max1;
else
bit=max2;

max1=bit;





strcpy(UNM, M);
change3(multiplicand, UNM, bit);
set(A, bit, M, Q, max1, max2);

change2(M, max1);
change2(Q, max2);
change2(UNM, max1);
change4(M, max1, Q, max2, bit, UNM, A);

printf("CNT ");
for(i=0; bit/2>=i;i++)
printf(" ");
printf("A");
for(i=0; bit/2>=i;i++)
printf(" ");
for(i=0; max2/2>=i;i++)
printf(" ");
printf("Q");
for(i=0; max2/2>=i;i++)
printf(" ");
for(i=0; max1/2>=i;i++)
printf(" ");
printf("M");
for(i=0; max1/2>=i;i++)
printf(" ");
printf(" 동작 상태\n");

printf("%2d %s %s %s\n",CNT, A, Q, M);

while(CNT!=0)
{

Leftshift(A, Q, CNT, max2, bit, M);
printf("%2d %s %s %s Left shift\n", CNT, A, Q, M);
process2(A, UNM, bit, Q, CNT, M, A);
printf("%2d %s %s %s A=A-M\n",CNT, A, Q, M);

if(A[0]=='1')
{
Q[max2]=='0';
process2(A, M, bit, Q, CNT, M, A);
printf("%2d %s %s %s Q0=0 & A=A+M\n",CNT, A, Q, M);
CNT--;
}
else
{
Q[max2]='1';
printf("%2d %s %s %s Q0=1\n",CNT, A, Q, M);
CNT--;
}

}
printf("%2d %s %s %s \n",CNT, A, Q, M);

result2(A, Q, bit, max2, 1);

}

void multiplication4(int multiplicand, int multiplier)
{

int i, CNT=0, max1, max2, bit, temp, boo=0;
char A[100], M[100], Q[100], UNM[100], X[100], X2[100];

firstset(M, Q);

if(multiplicand < 0) //M의 변화
{
temp=multiplicand*-1;
max1=change(temp, M);
strcpy(UNM, M); //UNM=-M

}
else
{
temp=multiplicand;
max1=change(temp, M);
}

if(multiplier < 0) //Q의 변화
{
temp=multiplier * -1;
max2=change(temp, Q);

}
else
{
temp=multiplier;
max2=change(temp, Q);
}


if (max1 > max2) //여기서 일단 비트 수를 계산한다.
bit=max1+1;
else
bit=max2+1;

if(multiplicand < 0) //최대 비트수가 계산되었으면 다시 자리마다 비트를 넣어준다.
{ //예를들어 111(5비트)->11001이 된다 그전에는 1001만 되었다.
temp=multiplicand*-1;
change3(temp, M, bit);
}
else
{
strcpy(UNM, M); //M의 0보다 클 때 이므로 UNM을 여기서 해줌
temp=multiplicand;
change3(temp, UNM, bit);
}

CNT=bit+1;

if(multiplier < 0)
{
temp=multiplier*-1;
change3(temp, Q, bit);
}

change4(M, max1, Q, max2, bit, UNM, A);

change2(M, bit);
change2(Q, bit);
change2(UNM, bit);

strcpy(X, A);
strcpy(X2, A);

if(M[0]==Q[0])
boo=1;
else
boo=-1;

printf("CNT");
for(i=0; bit/2>=i;i++)
printf(" ");
printf("A");
for(i=0; bit/2>=i;i++)
printf(" ");
for(i=0; bit/2>i;i++)
printf(" ");
printf("X");
for(i=0; bit/2>=i;i++)
printf(" ");
for(i=0; bit/2>=i;i++)
printf(" ");
printf("Q");
for(i=0; bit/2>=i;i++)
printf(" ");
for(i=0; bit/2>=i;i++)
printf(" ");
printf("M");
for(i=0; max1/2>=i;i++)
printf(" ");
printf(" 동작 상태\n");

printf("%2d %s %s %s %s\n",CNT, A,X, Q, M);

while(CNT!=0)
{
Leftshift(A, Q, CNT, bit, bit, M);
printf("%2d %s %s %s %s Left shift\n", CNT, A,X, Q, M);

if(A[0]==M[0])
{
process3(A, UNM, bit, Q, CNT, M, X);
printf("%2d %s %s %s %s X=A-M\n",CNT, A, X, Q, M);
}
else
{
process3(A, M, bit, Q, CNT, M, X);
printf("%2d %s %s %s %s X=A+M\n",CNT, A, X, Q, M);
}

if(A[0]==X[0])
{
Q[bit]='1';
strcpy(A, X);
printf("%2d %s %s %s %s Q0=1 & A=X\n",CNT, A, X, Q, M);
}
else
{
if((strcmp(X, X2)==0))
{
Q[bit]='1';
strcpy(A, X);
printf("%2d %s %s %s %s Q0=1 & A=X\n",CNT, A, X, Q, M);
}
else
{
Q[bit]='0';
printf("%2d %s %s %s %s Q0=0\n",CNT, A, X, Q, M);
}
}

CNT--;

}
printf("%2d %s %s %s %s \n",CNT, A, X, Q, M);


result2(A, Q, bit, bit, boo);

}

int main()
{// 피승수 승수
int multiplicand, multiplier, CNT=0;
int multiplicand2, multiplier2;
int multiplicand3, multiplier3;
int multiplicand4, multiplier4;


printf("피승수 : ");
scanf("%d", &multiplier);
printf("승수 : ");
scanf("%d", &multiplicand);

printf("부호 있는 피승수 : ");
scanf("%d", &multiplier2);
printf("부호 있는 승수 : ");
scanf("%d", &multiplicand2);

printf("피젯수 : ");
scanf("%d", &multiplier3);
printf("젯수 : ");
scanf("%d", &multiplicand3);

printf("부호 있는 피젯수 : ");
scanf("%d", &multiplier4);
printf("젯수 : ");
scanf("%d", &multiplicand4);




printf("부호없는 2진수의 곱셈 연산\n\n");
multiplication(multiplicand, multiplier);

printf("\n\n부호있는 2진수의 곱셈 연산\n\n");
multiplication2(multiplicand2, multiplier2);

printf("\n\n부호없는 2진수의 나눗셈 연산\n\n");
multiplication3(multiplicand3, multiplier3);

printf("\n\n부호있는 2진수의 나눗셈 연산\n\n");
multiplication4(multiplicand4, multiplier4);

getchar();
getchar();
}

혹시 덧셈이랑 뺄셈 코딩 관련해서 작성해주실 수 있으신지요

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.