天梯赛 L1-080 乘法口诀数列 (20 分)
题目
本题要求你从任意给定的两个 1 位数字 a 1 a_1 a1 和 a 2 a_2 a2 开始,用乘法口诀生成一个数列 { a n a_n an},规则为从 a 1 a_1 a1 开始顺次进行,每次将当前数字与后面一个数字相乘,将结果贴在数列末尾。如果结果不是 1 位数,则其每一位都应成为数列的一项。
输入格式
输入在一行中给出 3 个整数,依次为 a 1 、 a 2 a_1、a_2 a1、a2 和 n n n,满足 0 ≤ a 1 , a 2 ≤ 9 , 0 < n ≤ 1 0 3 0≤a_1,a_ 2≤9,0<n≤10^3 0≤a1,a2≤9,0<n≤103 。
输出格式:
在一行中输出数列的前 n n n 项。数字间以 1 个空格分隔,行首尾不得有多余空格。
测试样例
输入样例1:
2 3 10
输出样例1:
2 3 6 1 8 6 8 4 8 4
简单分析:
- 注意
2 5 10
这种情况 - 2*5=10,最后一位0也是要压进数组中的!
- 题目给出限制条件,9*9=81,乘法结果最多两位数
代码
#include <iostream>
#include <vector>
using namespace std;
int main() {
int a1, a2, n;
cin >> a1 >> a2 >> n;
vector<int> ans;
ans.push_back(a1), ans.push_back(a2);
int pos = 0;
while (ans.size() <= n) {
int c = ans[pos] * ans[pos + 1];
int d = 0;
if (c >= 10) {
d = c % 10;
c /= 10;
ans.push_back(c);
ans.push_back(d);
} else
ans.push_back(c);
pos++;
}
for (int i = 0; i < n; i++) {
if (i != 0) printf(" ");
printf("%d", ans[i]);
}
return 0;
}
总结反思
- 卡了自己好久,就是没有处理好两位数末尾是0的情况