【华为oj】超长正整数想加

问题描述:请设计一个算法完成两个超长正整数的加法。
接口说明
 /*
 请设计一个算法完成两个超长正整数的加法。
 输入参数:
 String addend:加数
 String augend:被加数
 返回值:加法结果
 */
 public String AddLongInteger(String addend, String augend)
 {
     /*在这里实现功能*/
  
  return null;     
 }
知识点: 字符串 
题目来源: 内部整理 
练习阶段: 初级 
运行时间限制: 10Sec
内存限制: 128MByte
输入:  
输入两个字符串数字
 
输出:  
输出相加后的结果,string型
 
样例输入: 99999999999999999999999999999999999999999999999999
1
                   

样例输出: 100000000000000000000000000000000000000000000000000

问题分析:输入的是两个字符串数字,要想实现加法运算,必须要转化成数字数组(int)型数组来存储字符串中的每个数字字符(当然存储的是字符ASCII码转化成数字后的int数),然后利用循环运算,将两个数组相加,注意进位的判断。

代码:

#include <iostream>
#include <string>

using namespace std;
#define N 10000

void longadd(string &,string &);

int main()
{
	string s1,s2;
	getline(cin,s1);
	getline(cin,s2);
	longadd(s1,s2);

	return 0;
}

void longadd(string &s1,string & s2)
{
	int len1=s1.size();
	int len2=s2.size();
	int a[N]={0},b[N]={0};
	//将字符串输入到整型数组中,低位放在第0位
	int i=0;
	for(i=0;i<len1;i++)
	{
		a[i]=s1[len1-i-1]-'0';//将数字转换成ASCII码
	}
	for(i=0;i<len2;i++)
	{
		b[i]=s2[len2-i-1]-'0';
	}
	int len=len1>len2?len1:len2;
	for(i=0;i<len;i++)
	{
		a[i]=a[i]+b[i];
		if(a[i]>=10)
		{
			a[i]=a[i]%10;
			a[i+1]++;
		}
	}
	//如果最高位还有进位
	if(a[len])
	{
		cout<<a[len];
	}
	//其他位输出
	for(i=len-1;i>=0;i--)
	{
		cout<<a[i];
	}
	cout<<endl;

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值