[BOJ]1110プラスサイクル(JAVA)


に質問
0以上99以下の整数を指定すると、次の演算が可能になります.与えられた数字が10より小さい場合は、前に0を加えて2桁にし、各桁の数字を加える.そして,与えられた数字の右端桁を先に求めたプロトコルの右端桁に加算することで,新しい数字を生成することができる.次の例を見てみましょう.
26から始まります.2+6=8.新しい数字は68です.6+8=14.新数は84です.8+4=12.新しい数字は42です.4+2=6.新しい数は26です.
上の例は4回で元の数に戻ることができます.したがって、26の周期長は4である.
Nが与えられた場合、Nの周期長を求めるプログラムを作成してください.
入力
1行目はNです.Nは0以上、99以下の整数である.
しゅつりょく
1行目にNのサイクル長を出力する.
例1
▼入力
26
▼出力
4
例2
▼入力
55
▼出力
3
例3
▼入力
1
▼出力
60
例4
▼入力
0
▼出力
1
に答える
  • Scanner.nextInt()で入力値を受け付けます.
  • 最初は条件判別が不要だったのでdo-whileゲートを使用.
  • 条件式で入力した値と新しい値が等しいか確認しなければならない.
  • 各ビット数を抽出するには、10の値のシェアと剰余を割る必要がある.
  • 新しい数字を文字列に変換し、統合して数字生成に変換します.
  • import java.util.Scanner;
    
    public class Main {
    	public static void main(String[] args) {
    		Scanner scanner = new Scanner(System.in);
    		int cnt = 0;	// 사이클 횟수
    		int num;	// 원래 값
    		int n;	// 입력받은 값
    		int ten, one;	// 각각 십의 자리, 일의 자리
    		
    		num = n = scanner.nextInt();	// 값을 입력받아 num에 저장해놓기
    		scanner.close();
    		
    		do {
    			if(n < 10) {	// 입력 받은 수가 10보다 작다면
    				ten = 0;	// 십의 자리 → 0
    				one = n;	// 일의 자리 → n(입력 받은 수)
    			}
    			else {
    				ten = n/10;	// 십의 자리 → 몫
    				one = n%10;	// 일의 자리 → 나머지
    			}
    
    			int sum = ten + one;	// 각 자리의 숫자 더하기
    			
    			int left, right;	// 각각 sum의 십의 자리, 일의 자리
    			
    			if(sum < 10) {	// sum이 10보다 작다면
    				left = 0;	// 십의 자리 → 0
    				right = sum;	// 일의 자리 → sum
    			}
    			else {
    				left = sum/10;	// 십의 자리 → 몫
    				right = sum%10;	// 일의 자리 → 나머지
    			}
    			
                		// 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수 이어 붙여 새로운 수 만들기
    			String str = "";
    			str += Integer.toString(one);
    			str += Integer.toString(right);
    			
    			n = Integer.parseInt(str);	// 숫자로 변환
    			cnt++;	// 사이클 횟수 카운트
    			
    		} while(num != n); // 새로운 수가 입력받은 값이 아닌 동안
    		
    		System.out.println(cnt);
    		
    	}
    }