シンプルなビッグ整数クラスを構築しようとしています。インターネット上のいくつかのページとそのすべてを読みましたが、 。私は理論を知っていますが、私はキャリーが必要だと知っていますが、私が見てきたすべての例は、文字列と基数10にもっと焦点を当てています。プラスの代入演算子については助けていただきたいと思います。その残りの部分は、自分で把握しようとします。Big Integerに加えて、私は理論を知っています...実際にはまだ錆びています。
#include <iostream>
#include <string>
#include <vector>
using std::cout;
using std::endl;
class big_integer {
using box = std::vector<int unsigned>;
box data {0};
box split(std::string const & p_input) const {
box output;
for (size_t i {}; i < p_input.size(); i += 8) {
output.push_back(stoi(p_input.substr(i, 8)));
}
return output;
}
public:
big_integer(std::string const & p_data)
: data {split(p_data)}
{}
big_integer(int unsigned const p_data)
: data {p_data}
{}
big_integer & operator +=(big_integer const & p_input) {
int carry {};
for (size_t i {}; i < data.size(); ++i) {
//Need help here!
//All examples I see either use primitive arrays
//or are too esoteric for me to understand.
//data[i] += p_input.data[i] + carry;
}
return *this;
}
std::string to_string() const {
std::string output;
output.reserve(data.size() * 8);
for (auto const i : data) {
output.append(std::to_string(i));
}
return output;
}
};
std::ostream & operator <<(std::ostream & p_output, big_integer const & p_input) {
return p_output << p_input.to_string();
}
int main() {
big_integer test1 {"126355316523"};
big_integer test2 {255};
test1 += test1;
cout << test1 << endl;
cout << test2 << endl;
return 0;
}
あなたの問題は何ですか?ベクトルは、その点で単純な配列と非常によく似ています。また、ベースはあまり重要ではありません。このアプローチは同じままです。 –
10以外であれば、どんなベースを使用することにしましたか? –
ああ、私はそんなに愚かな人だと知っています:(data [i] =(data [i] + p_input.data [i] + carry)%10; carry =(data [i ] + p_input.data [i] + carry)/ 10'はそのような行為をしますか? –