10000.大数相加问题

题目描述

给定两个字符串形式的非负整数 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;
}
结果展示:

在这里插入图片描述

ACM运行结果:

在这里插入图片描述

发布了29 篇原创文章 · 获赞 10 · 访问量 3187

猜你喜欢

转载自blog.csdn.net/sinat_40875078/article/details/105349344