c++ - Biguint < 运算符
问题描述
嗨,我需要帮助创建一个 < 运算符,但我不确定如何。
#include "biguint.h"
#include <string>
#include <cstdlib>
#include <iostream>
biguint::biguint()
{
for(size_t i = 0; i < CAPACITY; i++){
data_[i]=0;
}
}
biguint::biguint(const std::string &s){
int templeng = s.length();
for(size_t i = 0; i < templeng; i++){
data_[i] = s[templeng -i - 1] -'0';
}
for(size_t i = templeng; i < CAPACITY; i++){
data_[i]=0;
}
}
unsigned short biguint::operator [](std::size_t pos) const{
unsigned short i = 0;
if(pos >= 0 && pos < CAPACITY){
i = data_[pos];
}
return i;
}
std::ostream& operator <<(std::ostream& out, const biguint& b)
{
for (int i = biguint::CAPACITY; i > 0; i--) {
out<<b[i-1];
}
return out;
}
void biguint::operator += (const biguint & b){
int k = 0;
int temp = 0;
for (size_t i = 0; i < CAPACITY; i++) {
temp = data_[i]+b.data_[i];
if(temp >= 10){
data_[i] = temp-10;
data_[i+1]+=1;
}
else{
data_[i]=temp;
}
}
}
biguint operator + (const biguint & lhs, const biguint & rhs)
{
int temp;
bool remainder = false;
std::string result = "";
std::string reverse = "";
if(lhs.CAPACITY != rhs.CAPACITY)
{
return biguint("0");
}
for(int i =0; i < (int)lhs.CAPACITY;i++)
{
temp = lhs[i]+rhs[i];
if(remainder)
{
temp++;
remainder = false;
}
if(temp<10)
{
result = result + std::to_string(temp);
}
else {
result += std::to_string(temp - 10);
remainder = true;
}
}
for (int i = result.size() - 1; i >= 0; i--) {
reverse += result[i];
}
return biguint(reverse);
}
int biguint::compare(const biguint & b) const
{
return this->toStdString().compare(b.toStdString());
}
std::string biguint::toStdString() const
{
bool start = false;
std::string result = "";
for (int i = (int) this->CAPACITY - 1; i >= 0; i--) {
if (this->data_[i] == 0 && !start) {
if (this->CAPACITY == 1)
result += std::to_string(this->data_[i]);
continue;
}
else {
start = true;
result += std::to_string(this->data_[i]);
}
}
return result;
}
bool operator < (const biguint & lhs, const biguint & rhs)
{
}
这是我的 .cpp 文件,我有点迷失了如何创建 < 运算符。我已经创建了 +、+= 和两个字符串,但我不确定如何创建 <。我不确定如何访问这些数字,例如 biguint one("233") 我将如何访问该数字
解决方案
Tl; dr:在处理长度不匹配的情况时尝试逐位比较。
说出你给定的任意 2 个数字:
num1 = 12345
num2 = 57632
您可以直观地确定哪个更大:
- 从最重要的数字开始比较它们(例如,这里 5 > 1)
- 当相等时比较下一个有效数字(例如,如果数字是
92
和93
,你会比较2 < 3
得到你的答案。
唯一的区别是这里的单个数字存储在一个数组中。
PS您compare
似乎进行了字典比较-这真的是您想要的吗?
推荐阅读
- amazon-web-services - 使用 aws sam build 跳过 gradle 测试
- validation - 向节点内段落的分类参考子字段添加 notEmpty 约束?
- powerquery - Power Query - 基于两个数字的最大行数
- antlr4 - 在 ANTLR4 语法中将变量传递给字符串模板
- python - !_src.empty() 在函数 'cv::cvtColor' imgproc\src\color.cpp:182
- javascript - 我应该如何在 javascript 中访问动态 json 对象键
- java - 以数字作为属性名称的 Json 映射
- regex - 不能将超过 1 组符号放入弹性搜索正则表达式查询
- reactjs - 如何在类组件中使用 useQuery 钩子?
- json - 使用 jq 将 .json 转换为 csv 时出现“无法遍历字符串”错误