解题思路:
震惊,我以为这一道题是一个大数据的题目,所以我一开始就按照大数据的方法来写了。
使用vector创建可变长数组,这样的好处就是遇长则长,遇短则短。
想法如下:
利用数组的每一位储存n*a,其中,n为第几位,然后利用大数加法的概念将其全部倒叙,再进行进位判断,即:超过十进位,不超过十就不管了,这样就计算得出一个倒叙的答案了,我们再进行倒叙输出,注意排除末尾0(不过由于我们使用了是vector不是简单的数组,也没有什么末尾0的可能,姑且我们也照常进行一次判断)。
参考代码:
#include<bits/stdc++.h> using namespace std; int main() { vector<int> ans; int n,m; cin>>m>>n; for(int i=0,j=1; i<n; i++,j++) { ans.push_back(j*m); } reverse(ans.begin(),ans.end()); for(int i=0; i<n+1; i++) { if(ans[i]>=10) { ans[i+1]+=ans[i]/10; ans[i]%=10; } } for(int i=ans.size()-1; i>=0; i--) { if(ans[i]==0) { continue; } else { for(; i>=0; i--) cout<<ans[i]; break; } } cout<<endl; return 0; }
本体并没有在数据上面给我们埋下太多的陷阱,姑且到此为止,如果对一些算法类的东西不太熟的,这题只是想在简单数据量里面完成的同学可以参考一下这位同学的所写https://blog.dotcpp.com/a/2119
他的答案算师相当省空间了的。
PS:有同学可能对vector不太明白,这里说明一下:
vector(向量数组,可变长数组),属于STL模板库中的一元,调用时可以使用<vector>库进行调用,也可以使用万能头文件<bits/stdc++.h>进行调用,使用时类似于我们标准的数组使用,但与数组不同的就是,一旦其超出界限范围的时候会自动修改大小,这一点就决定了其可以减少很多的数据使用度,更主要的是,vector拥有很多已经封装的接口,如:
我们定义一个int型的vector: vector<int> c;
c.push_back(N) //在数组最后加入数据(这里是整数)N
c.back() // 传回最后一个数据,不检查这个数据是否存在。
c.begin() // 传回迭代器中的第一个数据地址。
c.capacity() // 返回容器中数据个数。
c.clear() // 移除容器中所有数据。
c.empty() // 判断容器是否为空。
c.end() // 指向迭代器中末端元素的下一个,指向一个不存在元素。
c.erase(pos) // 删除pos位置的数据,传回下一个数据的位置。
c.erase(beg,end) //删除[beg,end)区间的数据,传回下一个数据的位置。
c.front() // 传回第一个数据。
c.size() //返回其大小,类似于string类型的 string c; c.length();。或者是char a[];strlen(a);一样。在我们便利的时候这个使用频率比较高。
其余的大家可以直接baidu: vector c++来看一些资料,对各位做题很有帮助。
0.0分
3 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复