添加字符串以避免数量限制

时间:2015-06-12 09:24:15

标签: c++

我想通过添加数字来添加两个数字,就像你还是孩子一样。

为了计算非常长的数字(超过C ++限制)。

我的第一步是尝试一个总和< 10:

string valeur1 = "135";
string valeur2 = "844";
string result;

for (int i = 0; i < valeur1.length(); i++)
{
        std::ostringstream ss;
        int value;
        int value3;
        int value2;
        //string to int
        valeur1[i] >> value;
        valeur2[i] >> value2;
        value3 = (value + value2);
        // int to string
        ss << value3;
        result = result + ss.str();
}

cout << result;

我是朝着正确的方向前进的吗?

2 个答案:

答案 0 :(得分:1)

我认为你正朝着正确的方向前进。你可以改进的三件事:

  1. 当value3大于10时(你似乎意识到这一点),你必须考虑到这一点
  2. 当两个号码的数字位数不同时要小心。现在你的代码将失败。
  3. 您正在使用一组字符。为什么不使用整数数组呢?如果您只想避免整数的大小限制,我认为这将是一个更好的选择,因为您不需要所有字符串&lt; - &gt;整数转换。

答案 1 :(得分:0)

您的第一步非常简单:

#include <string>
#include <iostream>

int main()
    {
std::string s1 = "135";
std::string s2 = "844";
std::string result;

for(size_t i=0;i<std::min(s1.size(),s2.size());i++)
    result+= std::to_string(s1[i]-'0'+s2[i]-'0');

std::cout<<result<<std::endl;
return 0;
    }

修改

正如Gerard Abello所说,当sum大于3时,你应该考虑不同大小的字符串和大小写。但是,我相信字符串表示是一个不错的选择。将数字添加为字符串的选项之一。

# include <string>
# include <iostream>

std::pair<int,std::string> simpleConvert(const std::string &str);
std::string add(const std::string &first,const std::string &second);
int main()
    {
    std::string s1 = "128";
    std::string s2 = "9999";
    std::string result = add(s1,s2);
    std::cout<<result<<std::endl;
    return 0;
    }

std::pair<int,std::string> simpleConvert(const std::string &str)
    {
    if(str.size()==1)
        return std::make_pair(0,str);
    else if(str.size()==2)
        return std::make_pair(str[0]-'0',std::string(str.begin()+1,str.end()));
    }

std::string add(const std::string &first,const std::string &second)
    {
    std::string s1(first.rbegin(),first.rend()); 
    std::string s2(second.rbegin(),second.rend());
    auto n = s1.size();
    auto m = s2.size();
    auto min = std::min(n,m);
    auto max = std::max(n,m);
    for(size_t j=min;j!=max;j++)
        if(n<m)
            s1+="0";
        else 
            s2+="0";
    std::string result;
    int add=0;
    for(size_t i=0;i<s1.size();i++)
        {
        auto temp = simpleConvert(std::to_string(s1[i]-'0'+s2[i]-'0'+add));
        result+= temp.second;
        add = temp.first;
        }
    if(add!=0)
        result+=std::to_string(add);
    return std::string(result.rbegin(),result.rend());
    }