首页 > 其他分享 >实数相加

实数相加

时间:2022-12-08 15:24:40浏览次数:37  
标签:r1 r2 实数 相加 ++ len int 405

题目描述

C语言就要期末考试了,经过一学期的学习,小南学会了分数相加、分数相减、大整数相加,可就是没有尝试过将两个最大达400位的实数相加。在调试过程中,小南遇到了很多问题,一直解决不了。你能帮他编写一个程序实现两个实数相加吗?

输入

多组样例。每行输入一个样例包括两个用空格分开的实数xy,其中xy是长度不大于400位的非负实数。注意,非负实数中也可能包括非负整数,正整数会省略小数点和后面的0,只包括整数部分。

输出

对于每一行输入,输出两个实数xy相加的结果。输出结果中整数部分的前面和小数部分的末尾不输出多余的0;如果是整数,不输出小数点和小数点后面的0。每个输出占一行。

样例输入 Copy

1.1 2.9
1.1111111111 2.3444323343 
1 1.1
1.1111 1.1889

样例输出 Copy

4
3.4555434454 
2.1
2.3
#include <stdio.h>
#include<string.h>
int main(void)
{
    char x[405]={0}, y[405]={0};
    while (~scanf("%s %s", x, y))
    {
        int l1 = strlen(x), l2 = strlen(y);
        char x1[405] = { 0 }, x2[405] = { 0 };
        int i=l1, j=l2;
        for (int k = 0; k < l1; k++){
            if (x[k] == '.'){
                i = k;
                break;
            }
        }
        for (int k = 0; k < i; k++){
            x1[k] = x[k];
        }
        for (int k = i + 1; k < l1; k++){
            x2[k-i-1] = x[k];
        }
        char y1[405] = { 0 }, y2[405] = { 0 };
        for (int k = 0; k < l2; k++){
            if (y[k] == '.')
            {
                j = k;
            }
        }
        for (int k = 0; k < j; k++){
            y1[k] = y[k];
        }
        for (int k = j + 1; k < l2; k++){
            y2[k - j - 1] = y[k];
        }
        int r1[405] = { 0 }, t=0;
        int p = i - 1, q = j - 1;
        int r2[405] = { 0 }, t2 = 0;
        int len;
        if (l1 - i > l2 - j)
            len = l1 - 1 - i-1;
        else
            len = l2 - 1 - j-1;
        while (len >= 0){
            int g=x2[len], r=y2[len];
            if (x2[len] == 0)
                g = '0';
            if (y2[len] == 0)
                r = '0';
            r2[t2] = r2[t2]+g - '0' + r - '0';
            if (r2[t2] >= 10)
            {
                r2[t2] %= 10;
                r2[t2 + 1]++;
            }
            t2++,len--;
        }
        if (r2[t2] != 0)
        {
            r1[0] = r1[0] + 1;
        }    
        while (p >= 0 && q >= 0){
            r1[t] = r1[t] + x1[p] - '0' + y1[q] - '0';
            if (r1[t] >= 10)
            {
                r1[t] = r1[t] % 10;
                r1[t + 1]++;
            }
            t++, p--, q--;
        }
        while (p >= 0){
            r1[t] = r1[t] + x1[p] - '0';
            t++, p--;
        }
        while (q >= 0){
            r1[t] = r1[t] + y1[q] - '0';
            t++, q--;
        }
        if (r1[t] == 0)
            t = t - 1;
        for (t; t >= 0; t--)
            printf("%d", r1[t]);
        int fir = 0;
        while (r2[fir] == 0&&fir<t2)
            fir++;
        if (fir != t2){
            printf(".");
            int j = t2 - 1;
            for (j; j >= fir; j--)
                printf("%d", r2[j]);
        }
        printf("\n");
    }
    return 0;
}

 

标签:r1,r2,实数,相加,++,len,int,405
From: https://www.cnblogs.com/messing1758954258/p/16966178.html

相关文章