我想通过添加数字来添加两个数字,就像你还是孩子一样。
为了计算非常长的数字(超过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;
我是朝着正确的方向前进的吗?
答案 0 :(得分:1)
我认为你正朝着正确的方向前进。你可以改进的三件事:
答案 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());
}