| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1062 人关注过本帖
标题:实现长整数相加 怎么写代码
只看楼主 加入收藏
kldyutou
Rank: 1
等 级:新手上路
帖 子:13
专家分:4
注 册:2009-3-21
结帖率:66.67%
收藏
已结贴  问题点数:5 回复次数:3 
实现长整数相加 怎么写代码
2实现长整数相加,函数原型:char *add(const char*numl,const char *num2)
如:输入:"134253600000000"和“321411145562442”,输出:“455664745562442”
搜索更多相关主题的帖子: 整数 代码 相加 
2010-01-10 17:34
zj33
Rank: 2
等 级:论坛游民
帖 子:12
专家分:25
注 册:2008-10-2
收藏
得分:5 
#include <iostream>
#include <stack>
#include <cstring>
using namespace std;

//charadd函数的功能是将字符ch1和字符ch2变为数字相加,再加上进位,
//然后再变为字符返回
char charadd(char ch1, char ch2, bool &carry)
{
    int num;
    num = ch1 - '0' + ch2 - '0'; //变为两个数字之和
    if(carry)  //是否有进位
    {
        num++;
        carry = false;
    }
    if(num > 9)  //相加大于10,至进位标志为真,调整和
    {
        carry = true;
        num -= 10;
    }
    return num + '0';  //返回结果字符
}
char * add(const char *num1, const char *num2)
{
    char *str;
    char ch;
    int i, j;
    bool carry;
    stack<char> chstack;

    i = strlen(num1) - 1;   //指向num1的个位
    j = strlen(num2) - 1;   //指向num2的个位
    carry = false;
    while(i >= 0 && j >= 0)  //两个字符串从个位开始相加
    {
        ch = charadd(num1[i--], num2[j--], carry);
        chstack.push(ch);
    }
    while(i >= 0)  //num1数位长,把剩余的数字加上
    {
        ch = charadd(num1[i--], '0', carry);
        chstack.push(ch);
    }
    while(j >= 0)  //num2数位长,把剩余的数字加上
    {
        ch = charadd('0', num2[j--], carry);
        chstack.push(ch);
    }
    // 利用栈将结果输入到结果字符串str中
    j = chstack.size( );
    str = new char[j + 1];
    for(i = 0; i < j; i++)
    {
        str[i] = chstack.top( );
        chstack.pop( );
    }
    str[i] = '\0';
    return str;
}

int main( )
{
    char s1[ ] = "134253600000000";
    char s2[ ] = "321411145562442";
    char *str = add(s1, s2);
    cout << s1 << " + " << s2 << " = " << str << endl;
    delete [ ]str;
    return 0;
}
2010-01-10 21:25
kspliusa
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:98
专家分:178
注 册:2009-9-27
收藏
得分:0 
回复 2楼 zj33
好像还是得优化一下,如果输入:000000000 + 1 得到的是 000000001  应该是 1 才对吧,而且当你输入 0000000 + 0000000 应当得到 0 才对, 可是得到0000000! 最好在输出时判断首位是不是0,之后再输出较好!好像还是得优化一下,如果输入:000000000 + 1 得到的是 000000001  应该是 1 才对吧,而且当你输入 0000000 + 0000000 应当得到 0 才对, 可是得到0000000! 最好在输出时判断首位是不是0,之后再输出较好!
2010-01-10 22:24
kldyutou
Rank: 1
等 级:新手上路
帖 子:13
专家分:4
注 册:2009-3-21
收藏
得分:0 
回复 楼主 kldyutou
谢谢 非常好。
2010-01-11 17:35
快速回复:实现长整数相加 怎么写代码
数据加载中...
 
   



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

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