列表

详情


HJ57. 高精度整数加法

描述

输入两个用字符串 str 表示的整数,求它们所表示的数之和。

数据范围:

输入描述

输入两个字符串。保证字符串只含有'0'~'9'字符

输出描述

输出求和后的结果

示例1

输入:

9876543210
1234567890

输出:

11111111100

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 1ms, 内存消耗: 340KB, 提交时间: 2021-09-06

#include <stdio.h>
int main()
{
    char num1[100],num2[100];
    int x[5],y[5];
    int z[5];
    int a,b,c;
    int i,j,N1,N2,k,k1,k2,L1,L2,L11,L22,Lm;
    while(scanf("%s\n%s",num1,num2)!=EOF)
    {
        N1=0;N2=0;
        L1=strlen(num1); k1=L1/8; L11=L1%8;
        L2=strlen(num2); k2=L2/8; L22=L2%8;
        for(i=0;i<k1+k2+1;i++)
        {
            x[i]=0;y[i]=0;z[i]=0;
        }
        for(i=0;i<L11;i++)
                x[k1]=x[k1]*10+num1[i]-'0';
        for(i=0;i<L22;i++)
                y[k2]=y[k2]*10+num2[i]-'0';
        //完整部分
        for(N1=1;N1<=k1;N1++)
            for(i=0;i<8;i++)
                x[k1-N1]=x[k1-N1]*10+num1[L11+i+(N1-1)*8]-'0';

        for(N2=1;N2<=k2;N2++)
            for(i=0;i<8;i++)
                y[k2-N2]=y[k2-N2]*10+num2[L22+i+(N2-1)*8]-'0';
        
//         z[N]=x[N]+y[N];
//         
        if(k1>k2)
            k=k1;
        else
            k=k2;
        for(i=0;i<=k;i++)
        {
            z[i]=z[i]+x[i]+y[i];
            z[i+1]=z[i]/100000000;
            z[i]=z[i]%100000000;
            //printf("%8d",z[i]);
        }
        printf("%d",z[k]);
        for(i=k-1;i>=0;i--)
            printf("%08d",z[i]);
        
        printf("\n");
    }
    
    return 0;
}

C 解法, 执行用时: 1ms, 内存消耗: 348KB, 提交时间: 2021-09-13

#include<stdio.h>
void reverse(char *a, int len)
{
    char tmp;
    int front,rear;
    front=0;rear=len-1;
    while(front<rear)
    {
        tmp=a[front];
        a[front++]=a[rear];
        a[rear--]=tmp;
        
        
    }

}
int main()
{
    char a[10000]={0},b[10000]={0};
    int sum=0;
    char out[10010]={0};
    while(scanf("%s\n%s",a,b)!=EOF)
    {
       
        
       int len1=strlen(a);
        int len2=strlen(b);
        reverse(a,len1);
        reverse(b,len2);
        int maxlen=(len1>=len2)?len1:len2;
        
        int flag=0;
        for(int i=0;i<=maxlen;i++)
        {
            if(i>len1-1)
                a[i]='0';
            if(i>len2-1)
                b[i]='0';
            sum=a[i]-'0'+b[i]-'0'+flag;
            if(sum>9)
            {
                out[i]=sum%10+'0';
                flag=1;
            }
            else{
                out[i]=sum%10+'0';
                flag=0;
            }
         }
        
        if(out[maxlen]=='0')
        {
            for(int i=maxlen-1;i>=0;i--)
                printf("%c",out[i]);
        }
        else
        {
            for(int i=maxlen;i>=0;i--)
                printf("%c",out[i]);
        }
        printf("\n");

    }
 
    return 0;
}

上一题