
>>문제 바로가기<<
정답률 46.4%의 곱셈문제이다.
B에 받은 숫자를 하나하나 떼어서 A에 곱하라니,
난감한 상황이다.
일단 A는 그 자체적으로 계속 곱해주어야 하니
따로 건드릴 필요는 없을것 같고
B를 계속해서 건들여줘야 한다는 생각이 들 것이다.
이걸 어떻게 건드려야 하는지 알아보자.
Scanner sc = new Scanner(System.in);
int A = sc.nextInt();
String B = sc.next();
이는 코드의 일부이다.
일단 A는 int로, B는 String으로 받아준 다음
지금부터 B를 하나하나 쪼개볼것이다.
System.out.println(A * (B.charAt(2) - '0'));
처음 출력해야하는 숫자는 A에다가 B의 셋째자리 수를 곱한 연산이다.
B의 charAt(2)는 B의 3번째 문자를 가져오는것이고
charAt()라는 함수에서 알 수 있듯, "B의 세번째 문자"를 char형태로 가져오는것이다.
결론부터 말하면
char 자료형을 정수형으로써 연산하고자 하면
"아스키코드"로써 연산된다.
B에 385를 입력했다고 쳐보자.
B는 String으로 선언했으니 B에는 숫자 385가 아닌
문자 '385'가 저장되어있다.
charAt(2)로 세번째 문자 '5'를 빼왔고
'5'의 char형 아스키코드는 53이다.
'0'의 char형 아스키코드는 48이므로
둘이 빼게되면 5.
문자 '5'가 아닌 정수 5를 구할 수 있다.
즉 우리가 원하는 숫자가 나왔다.
이 아스키코드를 A와 곱한다고 했으니
A에다가 B의 셋째자리 수를 곱하는 것과 다름이 없는것이다.
System.out.println(A * (B.charAt(2) - '0'));
System.out.println(A * (B.charAt(1) - '0'));
System.out.println(A + (B.charAt(0) - '0'));
따라서
나머지 두번째자리, 첫번째자리와의 연산도 이와 같이 이루어진다.
System.out.print(A * Integer.parseInt(B));
마지막 출력해야 할 연산은
A와 B를 곱하는것이다.
A는 int형이고 B는 String형인데 어떻게 곱하지?
위에 나와있듯이 String을 int로 바꿔주는 함수
Integer.parseInt() 함수를 사용하면 된다.
사용하고자 하는 변수 안에 '숫자'문자가 있을때 사용할 수 있다.
문자가 들어가 있으면 함수를 사용할 수 없다.
결론적으로 코드는 이렇게 짜여진다.
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int A = sc.nextInt();
String B = sc.next();
System.out.println(A * (B.charAt(2) - '0'));
System.out.println(A * (B.charAt(1) - '0'));
System.out.println(A * (B.charAt(0) - '0'));
System.out.print(A * Integer.parseInt(B));
}
}
"맞았습니다!!"
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int A = sc.nextInt();
int B = sc.nextInt();
System.out.println(A * (B%10));
System.out.println(A * (B%100/10));
System.out.println(A * (B/100));
System.out.print(A * B);
}
}
위 코드를 사용하면 굳이 돌아서 갈 필요가 없다.
하나하나 분석해보도록 하자.
System.out.println(A * (B%10));
먼저, A와 B 모두 int로 받았다.
그리고 위 코드를 살펴보면, B에다가 10을 나눈 나머지를 A과 연산하고 있다.
B에다가 385를 입력했다고 쳐보자.
385를 10으로 나눈 나머지는 5이므로 B의 일의자리 수가 나오게된다.
System.out.println(A * (B%100/10));
이번엔 B에 100을 나눈 나머지를 10으로 나눴다.
B에는 385가 들어있으므로 100으로 나누면 85가 남고
85를 10으로 나누면 8이 나온다.
즉 B의 십의자리 수가 나오게된다.
System.out.println(A * (B/100));
마지막은 굳이 설명하지 않아도 이제 알 것이라 생각한다.
B에 385가 들어있으므로 100으로 나누면 3가 나오르모
B의 백의자리 수가 나오게된다.
위 숫자들을 그냥 A와 곱하게 되면 된다.
"맞았습니다!!"