洛谷OJ-P1001 A+B Problem 及其拓展

题目描述

输入两个整数a,b,输出它们的和(|a|,|b|<=10^9)。
注意

  1. pascal使用integer会爆掉哦!
  2. 有负数哦!
  3. c/c++的main函数必须是int类型,而且最后要return 0。这不仅对洛谷其他题目有效,而且也是noip/noi比赛的要求!

输入输出格式

输入格式:

两个整数以空格分开

输出格式:

一个数

输入输出样例

输入样例#1:
20 30

输出样例#1
50


解析:因为这一题的范围在int之内,且加法范围扩展到了负数,其实就等同于做减法。所以直接调用系统的“+”“-”即可,但是若没有范围上限的话,这题目就变成模拟手工算法的一题。


下面是对付没有范围的两数相加的算法。
写了一个算术类
其中void split(string astr , string bstr);的作用是分析输入,将加法归为具体的哪一类。比如两个正数还是一正一负。
void fullzero(string &astr , string &bstr);的作用是为位数较小的数补充到同一长度。
void addition(string astr , string bstr);接受两个非负整数的相加,且需要经过fullzero填充。
void differValue(string astr , string bstr);接受两个非负整数的相减,且要满足astr>=bstr,且需要这组数经过fullzero填充。

class fun{
    public:
        void split(string astr , string bstr);
        void fullzero(string &astr , string &bstr);
        void addition(string astr , string bstr);
        void differValue(string astr , string bstr);
    private:
        //保存结果
        string cstr;
}temp;

完整代码如下:

#include
using namespace std;

class fun{
    public:
        void split(string astr , string bstr);
        void fullzero(string &astr , string &bstr);
        void addition(string astr , string bstr);
        void differValue(string astr , string bstr);
    private:
        //保存结果
        string cstr;
}temp;

//使两个字符串位数对齐
void fun::fullzero(string &astr , string &bstr)
{
    while (astr.size()=0 ; i--)
    {
        if(astr[i] + bstr[i] + overflow - '0' - '0' >= 10)
        {
            cstr += astr[i] + bstr[i] + overflow - 10 - '0';
            overflow = 1;
        }
        else
        {
            cstr += astr[i] + bstr[i] + overflow - '0';
            overflow = 0;
        }
    }
    //先看是否有溢出位需要输出,再倒序输出
    if(overflow == 1)
    {
        cout<<"1";
    }
    for(int i = 0; i < cstr.size(); i++){
        cout<=0,j>=0; i--,j--)
    {
        //不够减
        if((astr[i]+overflow) bstr)
        {
            differValue(astr,bstr);
        }
        else if(astr == bstr)
        {
            cout<<"0"< astr)
        {
            differValue(bstr,astr);
        }
        else if(astr == bstr)
        {
            cout<<"0"<>a;
        ss>>b;
        temp.split(a,b);

    }
    return 0;
}

你可能感兴趣的:(洛谷OJ-P1001 A+B Problem 及其拓展)