• HDU_1753 大明A+B



    大明A+B

    Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 3081    Accepted Submission(s): 947


    Problem Description
    话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。
    这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。

    现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。
     

    Input
    本题目包含多组测试数据,请处理到文件结束。
    每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。
     

    Output
    请在一行里面输出输出A+B的值,请输出最简形式。详细要求请见Sample Output。
     

    Sample Input
    1.1 2.9
    1.1111111111 2.3444323343
    1 1.1
     

    Sample Output
    4
    3.4555434454
    2.1
     

    Author
    linle
     

    Source
     

    大数加法

            

    View Code
    #include <stdio.h>
    #include
    <string.h>
    #define N 500
    int l1, l2, l3, p1, p2;
    char a[N], b[N], c[N];
    void add()
    {
    int i, j, k = 0, flag, sum;
    for(i = l1 - 1; i - p1 > 0 && i - p1 > l2 - p2 - 1; i--)
    c[k
    ++] = a[i];
    for(j = l2 - 1; j - p2 > 0 && j - p2 > l1 - p1 - 1; j--)
    c[k
    ++] = b[j];
    flag
    = 0;
    while(i > p1 && j > p2)
    {
    sum
    = a[i--]-'0'+ b[j--]-'0'+flag;
    flag
    = sum/10;
    c[k
    ++] = sum%10 + '0';
    }
    c[k
    ++] = '.';
    for(i=p1-1, j = p2-1; i >= 0 && j >= 0; i--, j--)
    {
    sum
    = a[i]-'0'+b[j]-'0'+flag;
    flag
    = sum/10;
    c[k
    ++] = sum%10 + '0';
    }
    while(i >= 0)
    {
    sum
    = a[i--] - '0' + flag;
    flag
    = sum/10;
    c[k
    ++] = sum%10 +'0';
    }
    while(j >= 0)
    {
    sum
    = b[j--] - '0' + flag;
    flag
    = sum/10;
    c[k
    ++] = sum%10 +'0';
    }
    if(flag)
    c[k
    ++] = '1';
    c[k]
    = '\0';
    }

    int qu_0()
    {
    int i;
    for(i = 0; c[i] != '\0'; i++)
    if(c[i] != '0' || (i >= 1 && c[i-1]=='.'))
    break;
    c[i
    -1] = '\0';
    if(c[i] == '.')
    c[i]
    = '\0';
    return 0;
    }

    int main()
    {
    int i;
    while(scanf("%s%s",a, b)!=EOF)
    {
    l1
    = strlen(a);
    l2
    = strlen(b);
    for(i = 1; i < l1; i++)
    if(a[i] == '.')
    break;
    p1
    = i;
    for(i = 1; i < l2; i++)
    if(b[i] == '.')
    break;
    p2
    = i;
    add();
    l3
    = strlen(c);
    qu_0();
    for(i = l3 - 1; c[i] != '\0'; i--)
    printf(
    "%c", c[i]);
    putchar(
    '\n');
    memset(a,
    0, sizeof(a));
    memset(b,
    0, sizeof(b));
    memset(c,
    0, sizeof(c));
    }
    return 0;
    }

      

  • 相关阅读:
    迅为IMX6ULL开发板-Linux MISC驱动-编写实验程序
    迅为龙芯2K1000开发板快速体验
    迅为3399开发板Android系统-使用strace跟踪系统调用
    迅为imx6ull开发板使用c语言调用shell命令控制led灯
    迅为与龙芯强强联合匠心之作 iTOP-2K1000开发板正式发布
    迅为iTOP3399开发板QT系统PCIE 4G移植-测试程序
    迅为IMX8MM开发板Android编译环境搭建
    bzero和memset函数
    [linux 2021-10-14] linux中启动jar的shell脚本
    重写与重载的区别
  • 原文地址:https://www.cnblogs.com/vongang/p/2120538.html
Copyright © 2020-2023  润新知