그래서 간단한 정수 클래스를 만들려고 노력 중이며 인터넷과 일부 페이지를 읽었지만 막혀 있습니다. . 나는 이론을 알고 있고 나는 캐리가 필요하다는 것을 안다. 그러나 내가 본 모든 예들, 그들은 문자들과 10 진법에 더 많이 촛점을 맞추었고, 나는 좀 더 빨라진 다른 접근법을 사용하고있다. 더하기 대입 연산자에 대한 도움을 주시면 감사하겠습니다. 나머지는 직접 알아볼 것입니다.빅 정수 또한 이론을 알고 있습니다 ... 실제로는 녹슬지 않습니다.
#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'이 그 속임수를 사용합니까? –