PAT-L1-80 掛け算式列のJAVA実装

トピックの説明

この質問では、任意の 2 つの 1 桁の数字 a 1 および a 2 から開始し、乗算式を使用して数列 {a n } を生成する必要があります。ルールは a 1 から開始することです。これは数回実行され、そのたびに現在の数値が次の数値で乗算され、結果がシーケンスの最後に貼り付けられます。結果が 1 桁の数値でない場合、その各桁はシーケンス内の項目になります。


入力形式:
1 行に 3 つの整数を入力し、続いて a 1 、a 2 、n を入力し、0≤a 1 、a 2 ≤9、0<n≤ 10 3 を満たします。

出力形式:
シーケンスの最初の n 個の項目を 1 行に出力します。数字は 1 つのスペースで区切られ、行頭と行末に余分なスペースがあってはなりません。

入力サンプル:

2 3 10

出力例:

2 3 6 1 8 6 8 4 8 4

分析する

例からわかるように 2 * 3 = 6 なので、最初の 3 項目は 2, 3, 6 で
、後の 3 * 6 = 18; 18 は 2 桁の数字なので、1, 8 です。分別して保管しています

各積の結果を ArrayList に入れ、最終的にリストの size() が入力容量よりも小さいかどうかを判断し、2 つの乗算された数を 1 ビット後方に移動します。

コードは比較的理解しやすいので、コードに直接行きましょう

import java.util.Scanner;
import java.util.ArrayList;

public class Main{
    
    
    public static void main(String[] args){
    
    
        Scanner sc = new Scanner(System.in);
        int num1 = sc.nextInt();
        int num2 = sc.nextInt();
        int n = sc.nextInt();
        ArrayList<Integer> list = new ArrayList<>();
        list.add(num1);
        list.add(num2);
        int i = 0, j = 1;
        
        while(list.size() < n){
    
    
            int sum = list.get(i) * list.get(j);
            if(sum < 10){
    
    
                list.add(sum);
                i++;
                j++;
            }else{
    
    
            	//获取十位上的数
                int sum1 = sum / 10;
                //获取个位上的数
                int sum2 = sum % 10;
                //这里当时我还以为会有3位或以上的数,但想了一下,最多9*9也就81,哪来的3位数,所以上面就获取十位上的就行
                
                list.add(sum1);
                
                //判断此时list是否还是小于输入的大小,如果相等了就不加了
                if(list.size() < n){
    
    
                    list.add(sum2);
                }
                
                i++;
                j++;
            }
            
        }
        //这里是为了输出两数之间的空格
        for(int k = 0; k < n - 1; k++){
    
    
            System.out.print(list.get(k) + " ");
        }
        System.out.print(list.get(n - 1));
    }
}

おすすめ

転載: blog.csdn.net/giveupgivedown/article/details/129867766