2981:大整数加法-poj

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;
}

 

posted @ 2017-08-16 17:01  A-inspire  Views(223)  Comments(0Edit  收藏  举报