<첫 번째 시도>
#include<stdio.h>
#include<string.h>
void reverse(char arr[])
{
int len = strlen(arr);
for (int i = 0; i < len / 2; i++)
{
char temp = arr[i];
arr[i] = arr[len - i - 1];
arr[len - i - 1] = temp;
}
}
int main(void)
{
char A[4], B[4];
scanf("%s", A);
scanf("%s", B);
int i = 0;
int carry = 0;
int sum[5];
reverse(A);
reverse(B);
for (i = 0; i < 3; i++);
{
sum[i] = ((B[0] - '0') * (A[i]))%10 + carry;
carry = sum[i] / 10;
}
if (carry >= 1)
sum[3] = carry;
printf("%d", Y - 543);
return 0;
}
문자열을 이용하고 reverse함수를 만들어줘서 문제를 풀어나가려고 하였다가 방법을 바꾸었다.
<두 번째 시도>
#include<stdio.h>
int main(void)
{
int A;
char B[4];
int i;
char sum[5] = { 0 };
int total = 0;
scanf("%d %s", &A, B);
for (i = 0; i <3; i++){
sum[i] = (A) * (B[2 - i]);
}
printf("%s\n", sum[0]);
printf("%s\n", sum[1]);
printf("%s\n", sum[2]);
return 0;
}
<세 번째 시도>
#include<stdio.h>
int main(void)
{
int A;
int B[5];
scanf("%d", &A);
for(int i = 0;i<3;i++)
scanf("%1d", &B[i]);
int i = 0;
int g[5];
char arr1[5];
char arr2[5];
char arr3[5];
for (i = 0; i < 3; i++) {
g[i] = A * B[2 - i];
}
printf("%d\n", g[0]);
printf("%d\n", g[1]);
printf("%d\n", g[2]);
char
}
% 1d를 사용하여 배열 B의 각 요소에 하나씩 값을 입력받고자 하였고, for문을 통해 곱셈을 세 번 진행하여 주었다.
그러면 남은 과제는 각 곱셈의 결과에 따른 덧셈인데, 곱셉의 원리 그리고 위 문제의 그림에 따라서 이 세 값을 단순히 그냥 더해주면 안 된다는 것을 알 수 있는데, 처음에는 이를 배열 요소들을 뒤집어 각각 일의 자리와 십의 자리가 비어있는 g [1] , g [2]의 비어있는 부분에 0을 배열 요소 값으로 대입하여 문자열 덧셈을 진행하려 하였다. 그러나 이 값을 문자열로 바꾸어 연산을 하는데 조금 어려움이 있었다. 그래서 밑의 방법으로 다시 시도를 하였다.
<정답>
#include<stdio.h>
int main(void)
{
int A;
int B[5];
scanf("%d", &A);
for (int i = 0; i < 3; i++)
scanf("%1d", &B[i]);
int i = 0;
int g[5];
for (i = 0; i < 3; i++) {
g[i] = A * B[2 - i];
}
printf("%d\n", g[0]);
printf("%d\n", g[1]);
printf("%d\n", g[2]);
printf("%d", g[0] + g[1] * 10 + g[2] * 100);
return 0;
}
그림을 보고 뒤에 0을 붙이면 되지 않나? 생각을 하였고, 생각해보니 10에 10을 곲하면 100으로 뒤에 0이 붙는데, 이 수에 10과 100을 곱하면 문제의 그림에 있는 것처럼, 그리고 곱셈의 원리에 따른 연산을 구현할 수 있다는 생각에 위의 풀이대로 각각 10을 곱해주고 100을 곱해주었다.
<참고 : %1d의 사용>
int A;
int B[5];
scanf("%d", &A);
for(int i = 0;i<3;i++)
scanf("%1d", &B[i]);
위의 코드가 아닌 밑의 코드를 작성했다면, % 1d를 의도와는 다르게 잘못 사용한 것이다. 한 글자(숫자)씩 나누어 입력을 받고 싶어서 사용을 했는데, 밑의 코드는 예를들어 365를 입력할 때, 기대한 것은 B [0] = 3 , B [1] = 6, B [2] = 5인데, 실상은 배열의 이름 B는 배열 B의 첫 번째 요소 값 즉 B [0]의 주소 값을 가리키므로 B [0] = 3만 저장이 될 뿐 다른 요소들에 하나씩 나뉜 수들이 입력이 될 방법이 없어 B [0]의 값만 저장이 되게 된다. 그러므로 위의 코드처럼 반복문을 통해 하나씩 나누어진 수들이 골고루 입력받아지게끔 만들어 주어야 한다.
<의도와는 다른 %1d의 사용>
int A;
int B[5];
scanf("%d", &A);
scanf("%1d", &B);