使用栈的场景:
我已经断断续续的发了许多篇有关栈的使用了,本篇依旧是根据栈的特点来完成题目。
我在前面的文章中说过,你可以使用栈完成对一串数字的顺序和逆序输出,换句话说,你可以利用栈获取一串数字的每一位的数字,所以当你遇到要对一串数字的某一位进行操作的时候,你就可以将使用栈作为一种思路。
题目:
输入两个非负 10 进制整数 A 和 B (≤230−1),输出 A+B 的 D (1<D≤10)进制数。
输入格式:
输入在一行中依次给出 3 个整数 A、B 和 D。
输出格式:
输出 A+B 的 D 进制数。
输入样例:
123 456 8
输出样例:
1103
鸣谢用户谢浩然补充数据!
代码长度限制
16 KB
时间限制
200 ms
内存限制
64 MB
栈限制
8192 KB
我的思路:
思路:
一般对于进制的题目你都可以考虑使用位运算符,(⊙﹏⊙),不过当我学了栈之后我发现,栈的先进后出貌似对于这种计算进制有着天然的优势捏。
我们先计算得出数字的和,然后根据一般的进制转换思路完成每一位的数字,最后再逆序输出。
举个求进制数的例子:
关于如何获得转换进制后的数字呢,我手写了一个关于二进制转换的例子:
这就是简单的求一下11 的 二进制数,右边一列是余数。
图片形式演示栈的使用
这就是使用栈解决这个问题的关键部分了,我前面的文章里面并没有将栈抽象出来,其实你抽象出来的结果就是一个盒子,先放进去的东西压在下面(入栈或压栈),后放入的东西堆在上面,然后慢慢地取走最上面的那一个(出栈+删除栈顶元素),直到取完(栈空)为止。接下来看看代码吧
我的代码:
#include<iostream>
#include<stack>
using namespace std;
int main()
{int a,b,d;cin >> a >> b >> d;int s = a+b;if(s == 0){cout << "0";//考虑输入为0的情况return 0;}stack<int> st;//创建一个栈while(s != 0){st.push(s%d);//将元素放入栈里(即压栈)s /= d;}while(!st.empty()){//循环条件:栈不为空cout << st.top();//用cout将栈顶元素输出st.pop();//删除栈顶元素}return 0;
}
到这里就结束啦!!!
欢迎小伙伴们评论区讨论,提问。
我是荒古前,期待你的关注~~~
~~~完结撒花✌y( •̀ ω •́ )y✌~~~