hdu1002之简单大数加法运算

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{
    char num_a[1001],num_b[1001];
    int re_a[1001],re_b[1001],sum[1001];
    int t,pre=0,flag=1;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%s%s",num_a,num_b);
        //初始化
        memset(re_a,0,sizeof(re_a));
        memset(re_b,0,sizeof(re_b));
        memset(sum,0,sizeof(sum));
        
        int len_a=strlen(num_a);
        int len_b=strlen(num_b);
        int len_max=len_a>len_b?len_a:len_b;
        //将字符串转化为数字,并且倒序
        for(int i=0;i<len_a;++i)
        {
            re_a[len_a-1-i]=num_a[i]-'0';
        }
        for(int i=0;i<len_b;++i)
        {
            re_b[len_b-1-i]=num_b[i]-'0';
        }
        //倒叙后的数字进行相加
        for(int k=0;k<len_max;++k)
        {
            sum[k]=re_a[k]+re_b[k]+pre/10;
            pre=sum[k];
        }
        if(pre>9)
        {
            sum[len_max]=pre/10;
            len_max++;
        }
        printf("Case %d:\n",flag++);
        printf("%s + %s = ",num_a,num_b);
        //输出结果,每位数字需要对10进行取余输出
        for(int i=len_max-1;i>=0;--i)
        {
            printf("%d",sum[i]%10);
        }
        printf("\n");
        if(t)printf("\n");//在最后一次输出的时候不需要输出空一行
    }
    return 0;
}

题目要求

数字的长度为1000以内,进行大数加法运算。

解题思想

  1. 使用字符串接收大数
  2. 将字符串转化为数字,同时进行倒序(因为我们的加法都是从低位开始的)
  3. 利用两个倒序后的数字进行加和,并进行进位
  4. 输出存在于大数中的和sum的每位的值(通过对每位取余进行输出)

解题细节

1、不妨设数字串a长于字符串b
a0 a1 a2 a3…an1
b0 b1 b2 b3…bn2(n1>n2)
len_max(sum的长度)等于n1
2、倒序后的字符串为
an1 … a3 a2 a1 a0
bn2 … b3 b2 b1 b0
3、进行相加
sum[n1]=an1+bn2
sum[n1-1]=a[n1-1]+b[n2-1]
。。。。。。
sum[0]=a[0](记得进行进位计算,代码中的pre变量就是进位的标志位)
4、倒序输出sum的值(每位都对10进行取余计算)

发布了17 篇原创文章 · 获赞 16 · 访问量 1175

猜你喜欢

转载自blog.csdn.net/XYshaonianhaofang/article/details/104102822