| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 521 人关注过本帖
标题:大数相加问题
只看楼主 加入收藏
a99875984
Rank: 2
等 级:论坛游民
帖 子:188
专家分:24
注 册:2012-2-11
结帖率:94.64%
收藏
已结贴  问题点数:10 回复次数:5 
大数相加问题
程序代码:
#include "Add.h"
#include <iostream>
#include <vector>
using namespace std;

bool Add::ForwardBool = false;  //赋初值为 "没有进位"

void Add::Input()
{
    cout << "input two numbers :"<<endl;
    cin >> str1 >>str2;
}

void Add::add()
{
    int str1Len = str1.length();
    int str2Len = str2.length();
    int str3Len = (str1Len > str2Len) ? str1Len : str2Len;
    //使输入的数字同等长度
    if(str1Len < str2Len)
    {
        for(int i = str1Len;i < str2Len;i++)
        {
            str1.insert(0,"0");
        }
    }
    else
    {
        for(int i = str2Len;i < str1Len;i++)
        {
            str2.insert(0,"0");
         }
    }

    //每一位进行相加
    for(int i = str3Len-1; i >= 0 ;i--)
    {
        string str1Temp,str2Temp;
        str1Temp = str1[i];
        str2Temp = str2[i];
        int strTemp = atoi(str1Temp.c_str())+atoi(str2Temp.c_str());//atoi将字符型转换成整型
        if(true == ForwardBool)  // 如果有进位       42
        {
            strTemp = strTemp +1;
            ForwardBool = false;
        }
        if(strTemp >9)            //如果两个数加起来大于9
        {
            if(0 != i)             //如果不是数字的第一位,就采取进位方法,若是数字的第一位,就不进位了
            {
                strTemp = strTemp%10;
                ForwardBool = true;//      52
            }
        }
        vecResult.push_back(strTemp);//结果保存在vector中
    }
}

void Add::Output()
{
    vector <int> ::reverse_iterator reverse_it;  //倒序的方式输出vector
    for(reverse_it = vecResult.rbegin(); reverse_it != vecResult.rend() ;reverse_it ++)
    {
        cout << *reverse_it;
    }
    cout <<endl;
    vecResult.clear();          //vector清空
}
请问下42-52行什么意思啊?谢了哈
已经标注了

[ 本帖最后由 a99875984 于 2012-8-5 13:26 编辑 ]
搜索更多相关主题的帖子: color 
2012-08-05 13:25
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:10 
就是在处理进位呗。如果进到前面的那位是 9,那就还得一直往前进。
2012-08-05 14:10
a99875984
Rank: 2
等 级:论坛游民
帖 子:188
专家分:24
注 册:2012-2-11
收藏
得分:0 
回复 2楼 pangding
额,我第一次接触这种,所以是那部分看不懂,能详细解释下吗?谢了哈
2012-08-06 21:42
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
程序代码:
        int strTemp = atoi(str1Temp.c_str())+atoi(str2Temp.c_str());        // strTemp 现在存的就是这两位加起来的和。
        if(true == ForwardBool)          // 如果之前要求进位的话
        {
            strTemp = strTemp +1;        // 那么这位就还得再加一
            ForwardBool = false;            // 这时之前的进位就处理完了,暂时认为就不需要再进位了。
        }
        if(strTemp >9)            // 但如果现在这位比 9 还大
        {
            if(0 != i)             //如果不是数字的第一位,就采取进位方法,若是数字的第一位,就不进位了
            {
                strTemp = strTemp%10;    // 这位存的数,应该就是当前数的个位部分。
                ForwardBool = true;        // 并把十位进上去。(就是说如果之前算的是 13,这位就是 3,然后把 1 进到下一位去。)
            }
        }
2012-08-06 23:06
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
这样算详细了吗?你自己找两个数,做一做小学学的竖式加法就知道这是怎么一个过程了。
2012-08-06 23:07
a99875984
Rank: 2
等 级:论坛游民
帖 子:188
专家分:24
注 册:2012-2-11
收藏
得分:0 
回复 4楼 pangding
明白了,谢了哈
2012-08-07 11:14
快速回复:大数相加问题
数据加载中...
 
   



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

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