-大整数加法

 

题目描述

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

输入有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。输出一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。

样例输入

22222222222222222222
33333333333333333333

样例输出

55555555555555555555

代码如下:

#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
char a[201];
char b[201];
char c[500];
int cnt=0;

int main()
{
    int na,nb;
    int k;                 // 判断进位数
    int len;
    int temp;
    int countt;
    int p=-1;

    gets(a);
    gets(b);

    na=strlen(a);
    nb=strlen(b);

    len=max(na,nb);

    for(int i = na-1 ; i >= 0 ; i--){
        c[cnt++]=(int)a[i];                      //反向储存
    }
    strcpy(a,c);
    memset(c,0,sizeof(c));
    cnt=0;
    for(int i = nb-1 ; i >= 0 ; i--){
        c[cnt++]=(int)b[i];                    //反向储存
    }
    strcpy(b,c);
    memset(c,0,sizeof(c));
    cnt=0;

    for(int i = 0 ; i < len ; i++){
        countt=cnt;
        // 这是几种情况,如果a[i] / b[i] / c[i] 其中一个为 0  为0那个就不能 -48 了  
        // 不知道为啥,难道是因为 手动输入的 要-48 才 == 那个数,赋值的不用-48就是那个数了
        
        if(c[cnt]!=0&&b[i]!=0&&a[i]!=0)        c[cnt]=(a[i]-48)+(b[i]-48)+c[cnt];  
        else if(c[cnt]==0&&a[i]!=0&&b[i]!=0)   c[cnt]=(a[i]-48)+(b[i]-48);         
        else if(c[cnt]==0&&a[i]==0&&b[i]!=0)   c[cnt]=(b[i]-48);
        else if(c[cnt]==0&&a[i]!=0&&b[i]==0)   c[cnt]=(a[i]-48);
        else if(c[cnt]!=0&&a[i]==0&&b[i]!=0)   c[cnt]=(b[i]-48)+c[cnt];
        else if(c[cnt]!=0&&a[i]!=0&&b[i]==0)   c[cnt]=(a[i]-48)+c[cnt];

        temp=c[cnt];
        c[cnt]=temp%10;
        k=temp/10;
        cnt++;
        while(k) {              // 记录进位
            countt++;
            c[countt]+=k;
            k=k/10;
        }
    }
    for(int i = len ; i >= 0 ; i--) {         // 忽略前导0
        if(c[i]!=0) {
            p=i;
            break;
        }
    }
    if(p==-1) {         //判断输入的 数组 a 和 数组 b 是否全部都为 0
        p=0;           // 是就让它输出一个0  ,  当时写的时候 p = len-1 , 也过了,不知道为啥
    }
    for(int i = p ; i >= 0 ; i--) {
        printf("%d",c[i]);                     //反向输出为结果
    }
    return 0;
}

 

 

 

 
posted @ 2018-12-10 21:33  烂科人  阅读(272)  评论(0编辑  收藏  举报