题目描述
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
注意:
num1 和num2 的长度都小于 5000.
num1 和num2 都只包含数字 0-9.
num1 和num2 都不包含任何前导零
算法思路
定义两个字符串来表示两个大数,然后将字符串进行逆序处理之后逐个相加,设置进位考赋初始值0,具体如下:
1、定义两个整形数组a,b;并初始化为0;将两个字符串进行逆序处理,并转成int型,存入a,b中
2、将a,b数组逐位相加,并更新进位k.
3、判断最后的进位k是否大于0,若大于0则输出.
4、反转输出就是所要的结果
代码实现
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char s1[1000],s2[1000];
int max_length,k=0,s1_length,s2_length;
int a[500]={0},b[500]={0};
cin>>s1>>s2;
//获取字符串s1和s2的长度
s1_length=strlen(s1);
s2_length=strlen(s2);
//把字符串s1和s2逆序用数字排列
for(int i=0;i<s1_length;i++)
a[i]=s1[s1_length-i-1]-'0';
for(int i=0;i<s2_length;i++)
b[i]=s2[s2_length-i-1]-'0';
if(s1_length > s2_length)
max_length=s1_length;
else
max_length=s2_length;
for(int i=0;i<max_length;i++)
{
k+=a[i]+b[i];
a[i]=k % 10;
k=k/10;//进位
}
//最高位相加处理
if(k==1)
{
printf("1");
}
for(int i=max_length-1;i>=0;i--)
{
cout<<a[i];
}
cout<<endl;
return 0;
}