c0605 超长正整数的加法

【问题描述】
编写程序实现两个超长正整数(每个最长80位数字)的加法运算。
【输入形式】
从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083)。

  1. 第一行是超长正整数A;
  2. 第二行是超长正整数B;
    【输出形式】
    输出只有一行,是两个长整数的运算结果,从高到低依次输出各位数字。各位数字紧密输出。
    算法提示:
    1.用字符串输入两个超长整数,分别存放在两个字符串中,每一位对应一个字符串中的字符。
    2.以较短的超长整数为基准,从低位到高位,对应位转换成数字后相加,再加上前一位相加的进位,得到的和模上10再转换为字符即为当前位,得到的和整除10即为当前位的进位。将计算得到的每一位保存到结果字符数组。
    3.将较长字符串的剩余位加上最后一个进位移到结构数组后面。
    4.将结果数组反序输出(去掉高位多余的0)。
    【输入样例】
    134098703578230056
    234098
    【输出样例】
    134098703578464154
    【样例说明】
    进行两个正整数加法运算,134098703578230056 + 234098 = 134098703578464154。
    【评分标准】
    完全正确得20分,每个测试点4分,提交程序文件名为add.c。
  • 自做真题
//2020/3/31
#include<stdio.h>
#include<string.h>

void fun(char str_max[],char str_min[])
{
    int i,j;
    int len_max = strlen(str_max);
    int len_min = strlen(str_min);

    int c,t;

    c = 0;
    for(i = len_min - 1,j = len_max - 1;i>=0;i--,j--)
    {
        t = str_min[i] - '0' + str_max[j] - '0' + c;
        c = t/10;
        t = t%10;
        str_max[j] = t + '0';
    }
    if(c==0)//最后c==0
    {
        printf("%s\n",str_max);
    }
    if(c==1)//c==1
    {
        if(j == -1)//长度相同
        {
            printf("%d",c);
            printf("%s",str_max);
        }
        else//长度不同
        {
            while(c && j != -1)
            {
                t = str_max[j]-'0' + c;

                c = t/10;
                t = t%10;

                str_max[j--] = t + '0';
            }

            if(c==0)
                printf("%s\n",str_max);
            else
            {
                printf("%d",c);
                printf("%s\n",str_max);
            }

        }
    }
}


int main()
{
    char num1[100],num2[100];
    char tmp1[100],tmp2[100];

    scanf("%s%s",num1,num2);

    int i = 0;
    int len = 0;
    int ci = 0;

    i = 0;
    ci = 0;
    len = strlen(num1);
    while(num1[i] == '0') i++;
    for(;i<len;i++)
        tmp1[ci++] = num1[i];
    tmp1[ci] = '\0';

    i = 0;
    ci = 0;
    len = strlen(num2);
    while(num2[i] == '0') i++;
    for(;i<len;i++)
        tmp2[ci++] = num2[i];
    tmp2[ci] = '\0';

    if(strlen(tmp1) > strlen(tmp2))
        fun(tmp1,tmp2);
    else
        fun(tmp2,tmp1);
	return 0;
}

发布了71 篇原创文章 · 获赞 36 · 访问量 9426

猜你喜欢

转载自blog.csdn.net/qq_34686440/article/details/105233382
今日推荐