pta L1的句号-------------L1-080 乘法口诀数列

L1到此已经刷完了,接下来复盘一下并且明天开始巩固和接触数据结构即L2的题目了;

L1-80的题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/1386335159927652359

题目是很浅显易懂的,并且这道题的思路也不难,在根本上讲是一个模拟,反而这种题对我个人而言做起来比字符串的处理轻松不少;

我们可以采取这样的方式来处理这个题目:

用两个变量i,j来表示数组,i表示的是下标的变化,而j表示的是当前的进度,这来,就完完全全避免了出现数组下标错位的情况;

而这道题还需要注意的是对于出现乘积为10以上的数的处理,其实也很简单,用常规的分解就可以了,顺带储存下标

不得不说,L1这算是给我画上了一个圆满的句号,就此,L1的题目就可以告一段落了

 

 接下来就安心复习和学习数据结构啦;

Talk is cheap. Show me the code.

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int a1,a2,n;
 4 int a[1010];
 5 int main()
 6 {
 7     std::ios::sync_with_stdio(false);
 8     cin>>a1>>a2>>n;
 9     a[1]=a1;
10     a[2]=a2;
11     int j=3;//从下一个开始,更好处理和储存 
12     for(register int i=3;i<=n;j++)
13     {
14         int temp=a[j-1]*a[j-2];//定义乘积,注意,下标是j,这样避免下标错乱 
15         int temp1=temp;//防止乘积被破坏 
16         if(temp<10)//乘积小于10直接存 
17         {
18             a[i++]=temp;//存值并且下标加一 
19         }
20         else
21         {
22             while(temp1)//大于等于10的情况,即不是1位数 
23             {
24                 if(temp1<10)
25                 {
26                     a[i++]=temp%10;//最后只剩个位数的时候才存 
27                 }
28                 else
29                 {
30                     a[i++]=temp/10;//先存高位数 
31                 }
32                 temp1=temp1/10;
33             }
34         }
35     }
36     for(register int k=1;k<=n;k++)
37     {
38         cout<<a[k];
39         if(k<n)
40         cout<<" ";
41     }
42     return 0;    
43 } 

 

posted @ 2022-04-18 19:38  江上舟摇  阅读(100)  评论(0)    收藏  举报