• 九度OJ 1137:浮点数加法 (大数运算)


    时间限制:1 秒

    内存限制:32 兆

    特殊判题:

    提交:2725

    解决:736

    题目描述:

    求2个浮点数相加的和
    题目中输入输出中出现浮点数都有如下的形式:
    P1P2...Pi.Q1Q2...Qj
    对于整数部分,P1P2...Pi是一个非负整数
    对于小数部分,Qj不等于0

    输入:

    对于每组案例,第1行是测试数据的组数n,每组测试数据占2行,分别是两个加数。
    每组测试数据之间有一个空行,每行数据不超过100个字符

    输出:

    每组案例是n行,每组测试数据有一行输出是相应的和。
    输出保证一定是一个小数部分不为0的浮点数

    样例输入:
    2
    0.111111111111111111111111111111
    0.111111111111111111111111111111
    
    10000000.655555555555555555555555555555
    1.444444444444444444444444444445
    样例输出:
    0.222222222222222222222222222222
    10000002.1
    来源:
    2008年北京大学软件所计算机研究生机试真题

    思路:

    容易犯细节错误,此题我WA了好几次。


    代码:

    #include <stdio.h>
    #include <string.h>
    char s1[110], s2[110], s[110];
    int Find(char a[], int n)
    {
            int i;
            for (i = 0; a[i]; i++)
            {
                    if (a[i] == '.')
                    {
                            return i;
                    }
            }
            return -1;
    }
    int main()
    {
            int ca;
            scanf("%d", &ca);
            while (ca--)
            {
                    scanf("%s%s", s1, s2);
                    int n1 = strlen(s1);
                    int n2 = strlen(s2);
                    int pos1 = 0, pos2 = 0;
                    pos1 = Find(s1, n1);
                    pos2 = Find(s2, n2);
                    int i = n1, j = n2;
                    int d = (n1 - pos1) - (n2 - pos2);
                    if (d > 0)
                    {
                            for (; j < n2 + d; j++)
                            {
                                    s2[j] = '0';
                            }
                            s2[j] = '';
                            n2 = j;
                    }
                    else if (d < 0)
                    {
                            for (; i < n1 - d; i++)
                            {
                                    s1[i] = '0';
                            }
                            s1[i] = '';
                            n1 = i;
                    }
                    i--;
                    j--;
                    int t = 0, len = 0;
                    while (i >= 0 && j >= 0)
                    {
                            if(s1[i] == '.')
                            {
                                    s[len] = '.';
                            }
                            else
                            {
                                    t += s1[i] + s2[j] - 2 * '0';
                                    s[len] = t % 10 + '0';
                                    t /= 10;
                            }
                            len++;
                            i--;
                            j--;
                    }
                    while (i >= 0)
                    {
                            t += s1[i--] - '0';
                            s[len++] = t % 10 + '0';
                            t /= 10;
                    }
                    while (j >= 0)
                    {
                            t += s2[j--] - '0';
                            s[len++] = t % 10 + '0';
                            t /= 10;
                    }
                    if (t == 1)
                    {
                            s[len++] = '1';
                    }
                    j = 0;
                    while (s[j] == '0')
                    {
                            j++;
                    }
                    for (i = len - 1; i >= j; i--)
                    {
                            printf("%c", s[i]);
                    }
                    printf("
    ");
            }
            return 0;
    }
    /**************************************************************
        Problem: 1137
        User: liangrx06
        Language: C
        Result: Accepted
        Time:150 ms
        Memory:912 kb
    ****************************************************************/


    编程算法爱好者。
  • 相关阅读:
    转移阵地啦
    春之感--3月10日
    小鱼儿
    关于时间方法(date和simpledateformat)的实验
    hadoop练习处理地震数据
    出现log4j.properties问题
    远程hadoop集群方法
    小W学物理
    灵知的太阳信仰
    Blue
  • 原文地址:https://www.cnblogs.com/liangrx06/p/5083894.html
Copyright © 2020-2023  润新知