九度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 <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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值