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