Biguint <оператор - PullRequest
       5

Biguint <оператор

0 голосов
/ 29 января 2020

Привет, мне нужна помощь в создании оператора <, и я не знаю, как. </p>

#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"), как мне получить доступ к этому номеру </p>

1 Ответ

0 голосов
/ 29 января 2020

Tl; dr: Попробуйте сравнить di git с di git при обработке случаев с несовпадающими длинами.

Скажите, что вы дали любые 2 числа:

num1 = 12345
num2 = 57632

Интуитивно понятный способ определить, что больше:

  1. Сравните их, начиная с самого значительного ди git (например, здесь 5> 1)
  2. Когда равно сравнить следующие значащие ди git (например, если бы числа были 92 и 93, вы бы сравнили 2 < 3, чтобы получить ответ.

Единственная разница здесь отдельные цифры хранятся в массиве.

PS Ваш compare словно выполняет лексикографию c сравнение - действительно ли это то, что вы хотите?

...