解题思路:
震惊,我以为这一道题是一个大数据的题目,所以我一开始就按照大数据的方法来写了。
使用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分
4 人评分
众数问题 (C语言代码)浏览:820 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:653 |
母牛的故事 (C语言代码)浏览:1427 |
关于float,double变量的几点说明浏览:1810 |
星期判断机 (C语言代码)浏览:856 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:467 |
多输入输出练习2 (C语言代码)浏览:1653 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:454 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:455 |
A+B for Input-Output Practice (I) (C语言代码)浏览:570 |