题目描述
本题要求你从任意给定的两个 1 位数字 a1 和 a2 开始,用乘法口诀生成一个数列 {an},规则为从 a1 开始顺次进行,每次将当前数字与后面一个数字相乘,将结果贴在数列末尾。如果结果不是 1 位数,则其每一位都应成为数列的一项。
输入格式:
输入在一行中给出 3 个整数,依次为 a1、a2 和 n,满足 0≤a1,a2≤9,0<n≤103。
输出格式:
在一行中输出数列的前 n 项。数字间以 1 个空格分隔,行首尾不得有多余空格。
输入样例:
2 3 10
输出样例:
2 3 6 1 8 6 8 4 8 4
解析
可以由样例看出 2 * 3 = 6,所以前三项就是2,3, 6
而后面的 3 * 6 = 18;由于18是两位数,所以拆开存入就是1,8
我们可以把每次乘积结果放入ArrayList中,最后判断list的size()是否比输入的容量小就行了,然后相乘的两个数都各自往后移一位即可
代码比较易懂,我直接上代码吧
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));
}
}