| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4244 人关注过本帖, 1 人收藏
标题:任意长度的正小数的加法 求助
只看楼主 加入收藏
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1701
专家分:4334
注 册:2007-12-27
收藏
得分:3 
程序代码:
#include <stdio.h>
#include <string.h>
void foo()
{
    char a[401] = { 0 }, b[401] = { 0 }; //字符形式,不用的位置统统是0
    char sumint[810] = { 0 }, sumdec[810] = { 0 };  //每一位都是数值形式,不是字符。前者倒排
    int pa=-1, pb=-1, len_a, len_b;
    int i, td;
    scanf("%s %s", a, b);
    len_a = strlen(a);
    len_b = strlen(b);
    for (i = 0; i < 401; i++)
    {   //找到小数点
        if (a[i] == '.' || !a[i] && pa == -1)pa = i; //万一输入没有点
        if (b[i] == '.' || !b[i] && pb == -1)pb = i;
        if (pa >=0 && pb >= 0)break;
    }
    for (td = i = (len_a - pa > len_b - pb) ? len_a - pa : len_b - pb; i > 0; i--)
    {   //小数部分从低到高按位求和,前面多出一位保存给整数部分的进位,td保存了用得到的最大下标
        sumdec[i] += (a[pa + i] ? a[pa + i] - 48 : 0) + (b[pb + i] ? b[pb + i] - 48 : 0);
        sumdec[i - 1] = sumdec[i] / 10;
        sumdec[i] %= 10;
    }
    while (td > 0 && !sumdec[td])td--; //抹掉后缀0
    sumint[0] = sumdec[0]; //进位
    for (i = 1; pa - i >= 0 || pb - i >= 0; i++)
    {   //整数部分从低到高按位求和
        sumint[i - 1] += (pa - i >= 0 ? a[pa - i] - 48 : 0) + (pb - i >= 0 ? b[pb - i] - 48 : 0);
        sumint[i] = sumint[i - 1] / 10;
        sumint[i - 1] %= 10;
    }
    while (i > 0 && !sumint[i])i--; //抹掉前置0
    for (; i >= 0; i--) //因为倒排,所以倒输出
        printf("%d", sumint[i]); 
    if(td > 0)putchar('.'); //小数部分为零就没有小数点了
    for (i = 1; i < td + 1; i++) //输出小数部分,sumdec[0]是进位信息,所以从下标1开始
        printf("%d", sumdec[i]); 
    putchar('\n');
}

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-01-08 19:27
xianfajushi
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:527
专家分:690
注 册:2007-9-8
收藏
得分:0 
依你的意思该怎么写这题程序?
以下是引用叶纤在2020-1-8 17:12:57的发言:

额→_→这题真不简单,我居然头脑简单滴想成两数相加就行了1.11111111257558555+226665.22585555还要显示相同位数 ,,额→_→鄙视我之前说这就是最简单的加减运算

2020-01-08 19:38
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
收藏
得分:2 
回复 12楼 xianfajushi
大佬的灵魂发问是个奇妙的东西,会让你不由自主的拿起手机编译起来。。。。
先说问题,1,for循环不连续2,400位的小数我这个实现不了,3我是照着我几天前突然看到的头文件库加强着写的,有很多英文我没看懂,后期再啃。4我是用C++写的。。。。
#include <limits>
#include <iomanip>
#include <iostream>
int main()
{
for(int i=0;i<3;i++){
    double value1 ;
    double value2 ;
    double value3;
    std::cin>>value1>>value2;
    value3=value1+value2;
    constexpr auto digits1 = std::numeric_limits<decltype(value1)>::digits10;
   constexpr auto max_digits101 = (std::numeric_limits<decltype(value1)>::max_digits10)-1;
    //显示类型的位数比如double最大15-17位
 
constexpr auto digits2 = std::numeric_limits<decltype(value2)>::digits10;
   constexpr auto max_digits102 = (std::numeric_limits<decltype(value2)>::max_digits10)-1;
  
 
constexpr auto digits3 = std::numeric_limits<decltype(value3)>::digits10;
   constexpr auto max_digits103 = (std::numeric_limits<decltype(value3)>::max_digits10)-1;

    const auto original_precision = std::cout.precision();
   
        std::cout
            << std::setprecision(max_digits103) << value3 << '\n';
    return 0;
}
}
5后期测试
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
分别测试了几种数据

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-01-08 21:26
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
收藏
得分:0 
回复 12楼 xianfajushi
我的思维就就是c=a+b很简单的

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-01-08 21:28
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1701
专家分:4334
注 册:2007-12-27
收藏
得分:0 
你要是引用一个大数库,剩下的可不就是c=a+b么。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-01-08 22:40
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
收藏
得分:0 
回复 15楼 forever74
谢谢指点

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-01-09 00:43
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
题目简单 但各位的处理实在是太嘈杂了
简单的格式化处理而已
各种找到小数点 补全 什么的 都是多余的
%[^.].%s
按照小数点分割读取2个字符串
然后 整数部分相加 小数部分相加
输出 整数 输出. 输出小数 完事

https://zh.
2020-01-15 15:59
bcbbcclbbc
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:194
专家分:528
注 册:2019-8-15
收藏
得分:0 
今天想吃鱼,一是让市集老板给你处理好切块带回家,二是自己买鱼处理内脏血污后回家自个处理,看各自手艺。鱼处理好了,还需要煎炒煮炖外加调味,方可入胃,最后一个“吃”字,简单不?
2020-01-16 22:29
xianfajushi
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:527
专家分:690
注 册:2007-9-8
收藏
得分:0 
今天摆渡了一下大数阶乘,其中思路就不错https://baike.baidu.com/item/%E9%98%B6%E4%B9%98/4437932?fr=aladdin 最后一个C程序5000位的
2020-01-17 16:36
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
提示: 该帖被管理员或版主屏蔽

https://zh.
2020-01-17 17:52
快速回复:任意长度的正小数的加法 求助
数据加载中...
 
   



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

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