码迷,mamicode.com
首页 > 其他好文 > 详细

整数加法

时间:2017-11-01 20:38:43      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:相加   加法   eve   als   设计   阿拉伯   判断   一个   stream   

//------------------------------------整数加法---------------------------------//
/*
题目描述
请设计一个算法能够完成两个用字符串存储的整数进行相加操作,对非法的输入则返回error
输入描述:
输入为一行,包含两个字符串,字符串的长度在[1,100]。
输出描述:
输出为一行。合法情况输出相加结果,非法情况输出error

示例1
输入
123 123
abd 123
输出
246
Error
*/
/*
    这个题最好用字符串做,用整数做的话很麻烦,主要是在数极大的情况下,由于计算机整
    数编码的问题,各种类型的数都有自己的范围。
    用字符串就不用考虑这些,进位也很好进行。
*/

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int f6()
{
    string str1, str2;
    cin >> str1 >> str2;
    bool b1 = true, b2 = true;
    //判断是否全为数
    for (const auto &i : str1)
        if (i < 0 || i > 9)
        {
            b1 = false;
            break;
        }
    for (const auto &i : str2)
        if (i < 0 || i > 9)
        {
            b2 = false;
            break;
        }
    //两者都是阿拉伯数字时
    if (b1 && b2)
    {
        int str1len = str1.size();
        int str2len = str2.size();
        int minlen = min(str1len, str2len);//求出最小长度
        int maxlen = max(str1len, str2len);//求出最大长度
        vector<int> v;
        reverse(str1.begin(), str1.end());//先反转两个字符串,为了后面加法
        reverse(str2.begin(), str2.end());
        //加法,先把位数小的数加到大数对应位置上
        for (int i = 0; i < minlen; ++i)
            v.push_back((str1[i] - 0) + (str2[i] - 0));
        //大数大的位放进去
        for (int i = minlen; i < maxlen; ++i)
        {
            if (str1len > str2len)
                v.push_back(str1[i] - 0);
            else
                v.push_back(str2[i] - 0);
        }
        //进位,注意边界
        for (int i = 0; i < v.size() - 1; ++i)
        {
            if (v[i] >= 10)
            {
                v[i] -= 10;
                v[i + 1] += 1;
            }
        }
        //如果最高位依然进位,就push_back(1)
        if (v[v.size() - 1] >= 10)
        {
            v[v.size() - 1] -= 10;
            v.push_back(1);
        }
        //输出
        for (int i = v.size() - 1; i >= 0; --i)
            cout << v[i];
        cout << endl;
    }
    else
        cout << "error" << endl;
    return 0;
}

 

整数加法

标签:相加   加法   eve   als   设计   阿拉伯   判断   一个   stream   

原文地址:http://www.cnblogs.com/CoderZSL/p/7768044.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!