| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4275 人关注过本帖, 1 人收藏
标题:任意长度的正小数的加法 求助
只看楼主 加入收藏
Sky_
Rank: 2
等 级:论坛游民
帖 子:38
专家分:10
注 册:2019-12-17
结帖率:100%
收藏(1)
已结贴  问题点数:10 回复次数:19 
任意长度的正小数的加法 求助
任意长度的正小数的加法
给你两个正的小数A和B,你的任务是计算出A+B的值
输入
本题目包含多组测试数据,请处理到文件结束。
每一组测试数据在一行里面包含两个长度不大于400的正小数A和B
输出
请在一行里面输出输出A+B的值,请输出最简形式。
样例输入
1.1 2.9
1.1111111111 2.3444323343
1 1.1
样例输出
4
3.4555434454
2.1
我想着想着就把自己绕晕了 有没有简洁的代码可以参考一下
搜索更多相关主题的帖子: 输出 任意 加法 小数 长度 
2020-01-06 18:56
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:570
专家分:3727
注 册:2019-7-29
收藏
得分:1 
程序代码:
#include<stdio.h>

int main()
{
    int i=0,n;
    float a,b,sum[100];
    printf("请输入数据组数:");
    scanf("%d",&n);
    printf("请输入数据:\n");
    for(i=0;i<n;i++)
    {
        scanf("%f %f",&a,&b);
        sum[i]=a+b;
    }

    for(i=0;i<n;i++)
        printf("%f\n",sum[i]);

    return 0;
}

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2020-01-06 19:16
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
题目本身是很简单的,但就怕题目作者故意加入一些无聊的陷阱。
比如会不会有不是小数的输入?如:123 .123
比如会不会有前后零?如:0001.2 2.30000
比如小于1时整数部分要不要零?.1 .2 是输出 .3 还是 0.3
2020-01-07 08:59
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1705
专家分:4345
注 册:2007-12-27
收藏
得分:0 
嗯,样例输入第三行就有个整数1,不带点的

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-01-07 09:46
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:3 
回复 4楼 forever74
所以不喜欢这类的题目

程序代码:
#include <stdio.h>
#include <string.h>

void bar( const char* restrict s, char p[restrict static 1000] )
{
    size_t len = strlen( s );
    const char* dot = strchr( s, '.' );

    memset( p, '0', 1000 );
    p[499] = '.';
    p[999] = '\0';
    memcpy( dot?p+499-(dot-s):p+499-len, s, len );
}

void foo( const char* a, const char* b )
{
    char a_[1000], b_[1000], c_[1000];
    bar( a, a_ );
    bar( b, b_ );
    bar( "", c_ );

    // 相加
    unsigned carry = 0;
    for( size_t i=998; i!=0; --i )
    {
        if( i != 499 )
        {
            carry += a_[i]-'0' + b_[i]-'0';
            c_[i] = carry%10 + '0';
            carry /= 10;
        }
    }

    // 去除尾部的零
    {
        size_t i;
        for( i=998; c_[i]=='0'; --i );
        c_[i+(c_[i]!='.')] = '\0';
    }

    // 去除首部的零
    char* p = c_ + strspn(c_,"0");
    p -= (*p=='.');

    puts( p );
}

int main( void )
{
    for( char a[401],b[401]; scanf("%s%s",a,b)==2; )
        foo( a, b );
}

2020-01-07 11:08
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1705
专家分:4345
注 册:2007-12-27
收藏
得分:0 
r版您的版本太新,新到脱离我这种群众了。还得重新学习才能看懂俺就

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-01-07 21:44
xianfajushi
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:527
专家分:690
注 册:2007-9-8
收藏
得分:0 
觉得没必要去理会0的存在,就没必要去做特别对0的处理.
2020-01-08 09:37
xianfajushi
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:527
专家分:690
注 册:2007-9-8
收藏
得分:0 
其实很简单的程序,只是不知为何,老大地不愿动这手.
2020-01-08 09:38
xianfajushi
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:527
专家分:690
注 册:2007-9-8
收藏
得分:1 
在任何论坛中我遇到的‘还珠格格’的小兔最多了,因此,在此陈述一下不用处理0的想法,我的构思就是要想法对齐小数点位置,这样就不用理会虾米0的存在,函数原型void 字符四则运算之加法(char* a,char* aa);
‘还珠格格’的小兔,小兔吃虾米?萝卜,还珠格格上课第一天...哈哈
或许有天兴起,会花点精力与时间实现我的构思写写。

[此贴子已经被作者于2020-1-8 19:41编辑过]

2020-01-08 17:01
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
收藏
得分:0 
回复 9楼 xianfajushi
额→_→这题真不简单,我居然头脑简单滴想成两数相加就行了1.11111111257558555+226665.22585555还要显示相同位数 ,,额→_→鄙视我之前说这就是最简单的加减运算

[此贴子已经被作者于2020-1-8 17:51编辑过]


把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-01-08 17:12
快速回复:任意长度的正小数的加法 求助
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.071245 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved