| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6850 人关注过本帖
标题:求两个字符串相加后的模样
只看楼主 加入收藏
云团
Rank: 2
等 级:论坛游民
帖 子:36
专家分:41
注 册:2017-1-9
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:15 
求两个字符串相加后的模样
将两个字符串相加,并考虑其的正负和进位情况。
如 输入 1 9999
   输出 10000
 若输入 12345  3456678888
   输出 3456691233
 若输入 -123 23
   输出 -100
 若输入 -123 -77
   输出  -200
求大神回帖
搜索更多相关主题的帖子: 字符串 
2017-01-09 20:25
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
字符串长度没有限制???这个是大位数相加么~大数加法

@吹版~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-01-09 20:33
云团
Rank: 2
等 级:论坛游民
帖 子:36
专家分:41
注 册:2017-1-9
收藏
得分:0 
回复 2楼 九转星河
字符串长度没有限制。
2017-01-09 20:36
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
看上去像是相加,因为要考虑正负号问题~实际上一个程序要兼备加减运算功能~这个我先放放,有时间再做,看看有没有高手能帮你实现吧~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-01-09 20:45
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:10 
可以模拟竖式加减法。
无符号整数加法就简单点,如:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *_add(char *result, int resultLen, char *s, int sLen)
{
    char *p1=result+resultLen-1;
    char *p2=s+sLen-1;
    for (; p1>=result && p2>=s; p1--, p2--)
        *p1 += *p2-'0';
    return result;   
}

char *_Carry(char *result, int resultLen)
{
    char *p=result+resultLen-1;
    for (; p>=result; p--)
    {
        if (*p >= 10)
        {
            *p = *p-10;
            *(p-1) += 1;
        }
        *p = *p+'0';
    }
    if (*result == '0')
        strcpy(result, result+1);
    return result;
}

char *_addition(char *s1, char *s2)
{
    int s1Len = strlen(s1);
    int s2Len = strlen(s2);
    int resultLen  = 1 + (s1Len>s2Len?s1Len:s2Len);
    char *result = (char*)calloc(resultLen+1, sizeof(char));
    _add(result, resultLen, s1, s1Len);
    _add(result, resultLen, s2, s2Len);
    _Carry(result, resultLen);
    return result;
}

main()
{
    char s1[256], s2[256];
    printf("被加数:"); gets(s1);
    printf("加数:"); gets(s2);
    char *ans = _addition(s1, s2);
    printf("和:"); puts(ans);
    free(ans);
}

思路:
    1、无符号整数加法:
    如:“456” + “9789”
    1)分配6字节空间,前5字节存放各位对应的“和”运算结果:0,9,11,13,15,'\0'
    2)从右到左各位满10进1:当前位-=10,前一位+=1,结果:1,0,2,4,5,'\0'
    3)将各位数字转换为字符成串得出结果:10245

    2、有符号整数加法:
    1)同号相加。算法同上面,结果取符号。
    2)异号相加。不同点:
        (1)数字串等长直接比较大小,不等长取较长者为大,分配 较大者长度+2字节空间,结果符号取较大者符号。
        (2)各位对应用“减法”运算。
        (3)从右到左处理各位<0借10:当前位+=10,前一位-=1。

2017-01-09 23:06
云团
Rank: 2
等 级:论坛游民
帖 子:36
专家分:41
注 册:2017-1-9
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

 这个还是有些问题!!!
  求大神在看一下,能否在完全一些
2017-01-10 14:16
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 6楼 云团
5楼的说明了那个只适用于无符号加法~~

有符号的要另外弄个

我有点怀疑这题是不是你自己提出的研究而不是老师出题的~~

因为感觉一般出题不会这样加减混合考虑,单方面考虑就够了~

你这个条件差点就可以进行大位数加减乘除四则运算了~~~~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-01-10 14:44
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
无符号加法还行  有符号巨额加法 还是很麻烦的

DO IT YOURSELF !
2017-01-10 14:46
云团
Rank: 2
等 级:论坛游民
帖 子:36
专家分:41
注 册:2017-1-9
收藏
得分:0 
自己和同学研究的一个题目,问过老师了,老师给的答案只是无符号加减!!!
  所以在论坛找大神解决了

[此贴子已经被作者于2017-1-10 15:05编辑过]

2017-01-10 15:03
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
回复 6楼 云团
示例只适用无符号整数加法
有符号整数加法在“思路”里提到与无符号整数加法的不同之处,原理都一样,也不复杂,只是多几个判断语句就是了。
2017-01-10 16:22
快速回复:求两个字符串相加后的模样
数据加载中...
 
   



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

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