九度OJ-1026-又一版A+B

此题代码中应用了栈结构来完成其先进先出的特点。

  本题存在两个陷阱:

  ①当数据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
来源:
2008年浙江大学计算机及软件工程研究生机试真题
答疑:
解题遇到问题?分享解题心得?讨论本题请访问: http://t.jobdu.com/thread-7750-1-1.html
#include 
#include 
using namespace std;
 
int main(){
    int m,a,b; 
    unsigned int sum,temp;
    stack 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<


你可能感兴趣的:(九度OJ)