整数加法

题目描述

请设计一个算法能够完成两个用字符串存储的整数进行相加操作,对非法的输入则返回error

输入描述:

输入为一行,包含两个字符串,字符串的长度在[1,100]。

输出描述:

输出为一行。合法情况输出相加结果,非法情况输出error
示例1

输入

123 123
abd 123

输出

246
Error
/*实现两个大整数相加,因为用int和long都不能满足(溢出)*/
#include <iostream>
#include <cstring>
#include <stack>
#include<string>
using namespace std;
 
int isnum(string str)
{
  for (int i = 0; i < str.size(); i++)
  {
      if (!isdigit(str[i])) //判断是否有非数字的元素
      {
          cout<<"error"<<endl;
          return 0;
      }
  }
    return 1;
}
 
int main()
{
	string a,b;
	while (cin >> a >> b)
	{
		int sum = 0;
		int n = a.length()-1;
		int m = b.length()-1;
		stack<int> istack;
		int flag = 0;
		if (isnum(a) && isnum(b))
		{
			while (m >= 0 && n >= 0)
			{
				sum = (a[n--] - '0') + (b[m--] - '0') + flag;//字符串从后往前相加,跟正常的加法计算一样,flag存放的低位的进位数
				flag = sum / 10;//做进位处理,如果两个数相加超过10就把十位的数字存在flag
				istack.push(sum % 10);//把结果的个位数存入栈中
			}
			if (n >= 0)//如果字符串b结束字符串a还未结束
			{
				sum = (a[n--] - '0') + flag;
				flag = sum / 10;
				istack.push(sum % 10);
			}
			if (m >= 0)//如果字符串a结束字符串b还未结束
			{
				sum = (b[m--] - '0') + flag;
				flag = sum / 10;
				istack.push(sum % 10);
			}
            if(m<0&&n<0&&flag>0)
            {
                istack.push(flag);
            }
            
			while (!istack.empty())
			{
				cout << istack.top();
				istack.pop();
			}
			cout << endl;
		}
	}
	return 0;
}

  

转载于:https://www.cnblogs.com/wuyepeng/p/9775143.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值