此题代码中应用了栈结构来完成其先进先出的特点。
本题存在两个陷阱:
①当数据0时一定要单独处理:数据0不符合while(temp>0)的进行条件,将会直接跳过形成空栈,导致最后无数可输出。所以对其做特殊判定
②题目给的要求是,a与b皆为整型int范围内的非负实数,潜台词即sum=a+b若用int存储可能产生数据溢出!所以将sum定义为unsigned类型即可符合题意。
注:这里不可使用long int类型,因为有的机子上long int与int是等长的!为了避免去思考的麻烦,直接unsigned就好了,因为unsigned肯定比int多一位。
-
题目地址:点击打开链接
题目描述:
-
输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m <10)进制数。
-
输入:
-
输入格式:测试输入包含若干测试用例。每个测试用例占一行,给出m和A,B的值。
当m为0时输入结束。
-
输出:
-
输出格式:每个测试用例的输出占一行,输出A+B的m进制数。
-
样例输入:
-
8 1300 48 2 1 7 0
-
样例输出:
-
2504 1000
-
答疑:
- 解题遇到问题?分享解题心得?讨论本题请访问: http://t.jobdu.com/thread-7750-1-1.html
#include <iostream>
#include <stack>
using namespace std;
int main(){
int m,a,b;
unsigned int sum,temp;
stack<int> s;
while (cin>>m,m!=0){
//initiate
cin>>a>>b;
sum=a+b;
temp=sum;
//switch
if (temp==0)
s.push(0);
else{
while (temp>0){
s.push(temp%m);
temp/=m;
}
}
//output
while(!s.empty()){
cout<<s.top();
s.pop();
}
cout<<endl;
}
return true;
}