2981:大整数加法-poj

本文介绍了一种解决大整数加法问题的方法,通过字符串输入大整数,并将其转换为整型数组进行运算,最后输出结果。文章提供了一个完整的C++代码示例,包括去除前导零和处理0+0的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2981:大整数加法

总时间限制: 
1000ms
内存限制: 
65536kB
描述

求两个不超过200位的非负整数的和。

输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555
来源
程序设计实习2007
思路:数据用字符串输入,将字符串转换为整型,转换的时候逆序,以便于后面进位,求和,去0输出!注意考虑到0+0的情况!
代码:
#include<iostream>
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
using namespace std;
#define MAXLEN 2001
int a1[MAXLEN+10];
int a2[MAXLEN+10];
char str1[MAXLEN+10];
char str2[MAXLEN+10];
int main()
{
    int i,j;
    memset(a1,0,sizeof(a1));//分配内存并初始化整型数组
    memset(a2,0,sizeof(a2));
    int Len1,Len2;//定义字符数组的长度
    scanf("%s%s",&str1,&str2);
    Len1=strlen(str1);
    Len2=strlen(str2);
    j=0;
    for(i=Len1-1;i>=0;i--)//将字符串1转换为整型
    {
        a1[j]=str1[i]-'0';
        j++;
    }
    j=0;
    for(i=Len2-1;i>=0;i--)//将字符串2转换为整型
    {
        a2[j]=str2[i]-'0';
        j++;
    }
    if(Len1<Len2)//获取字符串最大长度
    {
        i=Len1;
        Len1=Len2;
        Len2=i;
    }
    for(i=0;i<Len1;i++)//计算和的值
    {
        a1[i]+=a2[i];
        if(a1[i]>=10)
        {
            a1[i]=a1[i]-10;
            a1[i+1]=a1[i+1]+1;
        }
    }
      for(i=Len1;a1[i]==0&&i>=0;i--);//去掉多余的0,输出和
      if(i>=0)
      {
      for(;i>=0;i--)
      printf("%d",a1[i]);
      }
      else
    printf("0");//0+0的情况
    
    return 0;
}

 

转载于:https://www.cnblogs.com/gcter/p/7374302.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值