Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- structural modeling
- FND
- atmega 128a
- uart 통신
- DHT11
- gpio
- test bench
- soc 설계
- ATMEGA128A
- hc-sr04
- i2c 통신
- BASYS3
- Recursion
- verilog
- ring counter
- pwm
- LED
- KEYPAD
- Linked List
- D Flip Flop
- dataflow modeling
- Pspice
- java
- vivado
- behavioral modeling
- Algorithm
- half adder
- Edge Detector
- prescaling
- stop watch
Archives
- Today
- Total
거북이처럼 천천히
알고리즘 (6월 13일) 본문
1. 문제 (코딩도장, 뒤쪽 0의 갯수 구하기)
https://codingdojang.com/scode/466?answer=28035#answer_28035
2. 생각
이때 N!를 정수로 변환 해 뒤에서 부터 연속되는 0의 갯수를 구하세요.
- 자연수 N 입력 받기
- for문을 통해 factorial, N! 구하기
- 나머지 연산자와 if문을 통해 일의자리가 0이면 countZero 값을 하나씩 더하고, 0이 아니면 while문에서 탈출한다.
- 결과 출력
- 하지만, primitive data type만으로는 25! 의 숫자들을 모두 담을 수 없다는 문제점이 발생
- 이를 위해 무제한으로 정수 숫자들을 담을 수 있는 BigInteger 클래스를 이용
- BigInteger를 통해 long 타입의 범위 이상의 숫자들을 담을 수 있다.
3. 풀이 및 코드 분석
import java.util.Scanner;
import java.math.BigInteger;
public class countZero {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// 입력 받기
int N;
while(true) {
System.out.print("자연수 N을 입력하시오.:");
N = scan.nextInt();
if(N<1) {
System.out.println("잘못입력하셨습니다.");
}else {
break;
}
}
// bigInteger 클래스를 이용하여 factorial 계산
BigInteger factorial = new BigInteger("1");
for(int i=2; i<=N; i++) {
factorial = factorial.multiply(BigInteger.valueOf(i));
}
// 뒷자리 0의 갯수 계산
int countZero = 0;
BigInteger ten = new BigInteger("10");
BigInteger units;
while(true) {
units = factorial.remainder(ten);
if(units.intValue()==0) {
countZero++;
factorial = factorial.divide(ten);
}else {
break;
}
}
// 결과 출력
System.out.printf("뒤쪽 0의 갯수: %d", countZero);
}
}
4. 메모
- BigInteger 클래스는 primitive data type과 다르게 무한히 많은 숫자들을 담을 수 있다.
- BigInteger 가 무한히 많은 숫자들을 담을 수 있는 이유는 문자열(String) 형태로 숫자를 받고 저장하기 때문이다.
- 따라서 BigInteger를 가지고 사칙연산하기 위해서는 BigInteger 클래스에서 제공하는 메소드를 이용해야한다.
- https://jbhdeve.tistory.com/69?category=1027193
'Algorithm > 알고리즘 문제 풀이' 카테고리의 다른 글
알고리즘 (6월 13일) - (3) (0) | 2022.06.13 |
---|---|
알고리즘 (6월 13일) - (2) (0) | 2022.06.13 |
알고리즘 (6월 12일) (0) | 2022.06.12 |
알고리즘 (6월 10일) (0) | 2022.06.11 |
알고리즘 (6월 9일) (0) | 2022.06.09 |