兼容cl.exe和gcc
parent
2fad5c8db7
commit
92c7cd5257
|
@ -1,6 +1,8 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
|
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$/general">
|
||||||
|
<contentRoot DIR="$PROJECT_DIR$" />
|
||||||
|
</component>
|
||||||
<component name="JavaScriptSettings">
|
<component name="JavaScriptSettings">
|
||||||
<option name="languageLevel" value="ES6" />
|
<option name="languageLevel" value="ES6" />
|
||||||
</component>
|
</component>
|
||||||
|
|
|
@ -2,8 +2,7 @@
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="CMakeRunConfigurationManager" shouldGenerate="true" shouldDeleteObsolete="true">
|
<component name="CMakeRunConfigurationManager" shouldGenerate="true" shouldDeleteObsolete="true">
|
||||||
<generated>
|
<generated>
|
||||||
<config projectName="generallib" targetName="General" />
|
<config projectName="General" targetName="General" />
|
||||||
<config projectName="generallib" targetName="generallib" />
|
|
||||||
</generated>
|
</generated>
|
||||||
</component>
|
</component>
|
||||||
<component name="CMakeSettings" AUTO_RELOAD="true">
|
<component name="CMakeSettings" AUTO_RELOAD="true">
|
||||||
|
@ -20,7 +19,6 @@
|
||||||
<change beforePath="$PROJECT_DIR$/general/src/pattern/signleton.h" beforeDir="false" afterPath="$PROJECT_DIR$/general/src/pattern/signleton.hpp" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/general/src/pattern/signleton.h" beforeDir="false" afterPath="$PROJECT_DIR$/general/src/pattern/signleton.hpp" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/general/src/pattern/stratergy.h" beforeDir="false" afterPath="$PROJECT_DIR$/general/src/pattern/stratergy.hpp" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/general/src/pattern/stratergy.h" beforeDir="false" afterPath="$PROJECT_DIR$/general/src/pattern/stratergy.hpp" afterDir="false" />
|
||||||
</list>
|
</list>
|
||||||
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||||
|
@ -42,9 +40,17 @@
|
||||||
</component>
|
</component>
|
||||||
<component name="OCFindUsagesOptions" text="true" ivars="false" properties="true" derivedClasses="false" />
|
<component name="OCFindUsagesOptions" text="true" ivars="false" properties="true" derivedClasses="false" />
|
||||||
<component name="ProjectId" id="1UhntPy4Y6cJ81thpskTMk9Asng" />
|
<component name="ProjectId" id="1UhntPy4Y6cJ81thpskTMk9Asng" />
|
||||||
|
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
|
||||||
|
<component name="ProjectViewState">
|
||||||
|
<option name="hideEmptyMiddlePackages" value="true" />
|
||||||
|
<option name="showLibraryContents" value="true" />
|
||||||
|
</component>
|
||||||
<component name="PropertiesComponent">
|
<component name="PropertiesComponent">
|
||||||
|
<property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
|
||||||
|
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
|
||||||
<property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
|
<property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
|
||||||
<property name="WebServerToolWindowFactoryState" value="false" />
|
<property name="WebServerToolWindowFactoryState" value="false" />
|
||||||
|
<property name="cf.first.check.clang-format" value="false" />
|
||||||
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
|
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
|
||||||
<property name="node.js.detected.package.eslint" value="true" />
|
<property name="node.js.detected.package.eslint" value="true" />
|
||||||
<property name="node.js.detected.package.tslint" value="true" />
|
<property name="node.js.detected.package.tslint" value="true" />
|
||||||
|
@ -62,33 +68,12 @@
|
||||||
<recent name="D:\project\c++\generallib\src\encrypt" />
|
<recent name="D:\project\c++\generallib\src\encrypt" />
|
||||||
</key>
|
</key>
|
||||||
</component>
|
</component>
|
||||||
<component name="RunDashboard">
|
<component name="RunManager">
|
||||||
<option name="ruleStates">
|
<configuration name="General" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="General" TARGET_NAME="General" CONFIG_NAME="Debug">
|
||||||
<list>
|
|
||||||
<RuleState>
|
|
||||||
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
|
|
||||||
</RuleState>
|
|
||||||
<RuleState>
|
|
||||||
<option name="name" value="StatusDashboardGroupingRule" />
|
|
||||||
</RuleState>
|
|
||||||
</list>
|
|
||||||
</option>
|
|
||||||
</component>
|
|
||||||
<component name="RunManager" selected="CMake Application.generallib">
|
|
||||||
<configuration name="General" type="CMakeRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" PROJECT_NAME="generallib" TARGET_NAME="General" CONFIG_NAME="Debug">
|
|
||||||
<method v="2">
|
<method v="2">
|
||||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
||||||
</method>
|
</method>
|
||||||
</configuration>
|
</configuration>
|
||||||
<configuration name="generallib" type="CMakeRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" PROJECT_NAME="generallib" TARGET_NAME="generallib" CONFIG_NAME="Debug">
|
|
||||||
<method v="2">
|
|
||||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
|
||||||
</method>
|
|
||||||
</configuration>
|
|
||||||
<list>
|
|
||||||
<item itemvalue="CMake Application.generallib" />
|
|
||||||
<item itemvalue="CMake Application.General" />
|
|
||||||
</list>
|
|
||||||
</component>
|
</component>
|
||||||
<component name="SvnConfiguration">
|
<component name="SvnConfiguration">
|
||||||
<configuration />
|
<configuration />
|
||||||
|
@ -141,23 +126,41 @@
|
||||||
<workItem from="1587713244566" duration="10654000" />
|
<workItem from="1587713244566" duration="10654000" />
|
||||||
<workItem from="1588607501663" duration="599000" />
|
<workItem from="1588607501663" duration="599000" />
|
||||||
<workItem from="1588685364145" duration="2436000" />
|
<workItem from="1588685364145" duration="2436000" />
|
||||||
|
<workItem from="1588731711427" duration="7486000" />
|
||||||
</task>
|
</task>
|
||||||
<servers />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
<component name="TypeScriptGeneratedFilesManager">
|
<component name="TypeScriptGeneratedFilesManager">
|
||||||
<option name="version" value="1" />
|
<option name="version" value="2" />
|
||||||
</component>
|
</component>
|
||||||
<component name="Vcs.Log.Tabs.Properties">
|
<component name="Vcs.Log.Tabs.Properties">
|
||||||
<option name="TAB_STATES">
|
<option name="TAB_STATES">
|
||||||
<map>
|
<map>
|
||||||
<entry key="MAIN">
|
<entry key="MAIN">
|
||||||
<value>
|
<value>
|
||||||
<State>
|
<State />
|
||||||
<option name="COLUMN_ORDER" />
|
|
||||||
</State>
|
|
||||||
</value>
|
</value>
|
||||||
</entry>
|
</entry>
|
||||||
</map>
|
</map>
|
||||||
</option>
|
</option>
|
||||||
|
<option name="oldMeFiltersMigrated" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="WindowStateProjectService">
|
||||||
|
<state x="651" y="314" width="409" height="388" key="#Notifications" timestamp="1588741195489">
|
||||||
|
<screen x="0" y="40" width="1536" height="824" />
|
||||||
|
</state>
|
||||||
|
<state x="651" y="314" width="409" height="388" key="#Notifications/0.40.1536.824@0.40.1536.824" timestamp="1588741195489" />
|
||||||
|
<state x="223" y="107" key="#com.intellij.execution.impl.EditConfigurationsDialog" timestamp="1588731831415">
|
||||||
|
<screen x="0" y="40" width="1536" height="824" />
|
||||||
|
</state>
|
||||||
|
<state x="223" y="107" key="#com.intellij.execution.impl.EditConfigurationsDialog/0.40.1536.824@0.40.1536.824" timestamp="1588731831415" />
|
||||||
|
<state x="549" y="206" key="FileChooserDialogImpl" timestamp="1588739069638">
|
||||||
|
<screen x="0" y="40" width="1536" height="824" />
|
||||||
|
</state>
|
||||||
|
<state x="549" y="206" key="FileChooserDialogImpl/0.40.1536.824@0.40.1536.824" timestamp="1588739069638" />
|
||||||
|
<state x="270" y="96" key="SettingsEditor" timestamp="1588739395688">
|
||||||
|
<screen x="0" y="40" width="1536" height="824" />
|
||||||
|
</state>
|
||||||
|
<state x="270" y="96" key="SettingsEditor/0.40.1536.824@0.40.1536.824" timestamp="1588739395688" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
# Set the install prefix
|
# Set the install prefix
|
||||||
if(NOT DEFINED CMAKE_INSTALL_PREFIX)
|
if(NOT DEFINED CMAKE_INSTALL_PREFIX)
|
||||||
set(CMAKE_INSTALL_PREFIX "C:/Program Files (x86)/General")
|
set(CMAKE_INSTALL_PREFIX "C:/Program Files (x86)/generallib")
|
||||||
endif()
|
endif()
|
||||||
string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
|
string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
||||||
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
|
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
|
||||||
# using Intel C++
|
# using Intel C++
|
||||||
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
|
add_compile_options("/std:c++17")
|
||||||
# using Visual Studio C++
|
# using Visual Studio C++
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -26,7 +27,7 @@ aux_source_directory(src DIRSRCS)
|
||||||
aux_source_directory(src/pattern PaternSrc)
|
aux_source_directory(src/pattern PaternSrc)
|
||||||
|
|
||||||
|
|
||||||
add_library(General OBJECT ${DIRSRCS} ${PaternSrc} src/pattern/signleton.h src/pattern/Observer.h src/pattern/stratergy.h src/pattern/adapter.h src/encrypt/base64.cpp src/encrypt/base64.h src/encrypt/aes.cpp src/encrypt/aes.h src/encrypt/rsa.cpp
|
add_library(General OBJECT ${DIRSRCS} ${PaternSrc} src/pattern/signleton.hpp src/pattern/Observer.hpp src/pattern/stratergy.hpp src/pattern/adapter.hpp src/encrypt/base64.cpp src/encrypt/base64.h src/encrypt/aes.cpp src/encrypt/aes.h src/encrypt/rsa.cpp
|
||||||
src/math/BigInt.hpp src/net/TcpClient.cpp src/net/TcpClient.h src/net/PackageReceiver.cpp src/net/PackageReceiver.h)
|
src/math/BigInt.hpp src/net/TcpClient.cpp src/net/TcpClient.h src/net/PackageReceiver.cpp src/net/PackageReceiver.h)
|
||||||
|
|
||||||
set(COPYITEM inc)
|
set(COPYITEM inc)
|
||||||
|
@ -58,7 +59,7 @@ file(GLOB NET ${PROJECT_SOURCE_DIR}/src/net/*.h)
|
||||||
file(COPY ${NET} DESTINATION ${LIBRARY_OUTPUT_PATH}/inc/
|
file(COPY ${NET} DESTINATION ${LIBRARY_OUTPUT_PATH}/inc/
|
||||||
FILE_PERMISSIONS OWNER_READ OWNER_WRITE GROUP_WRITE GROUP_READ WORLD_READ)
|
FILE_PERMISSIONS OWNER_READ OWNER_WRITE GROUP_WRITE GROUP_READ WORLD_READ)
|
||||||
IF (WIN32)
|
IF (WIN32)
|
||||||
|
message("it is windows 32")
|
||||||
ELSEIF (UNIX)
|
ELSEIF (UNIX)
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
TARGET General PRE_BUILD
|
TARGET General PRE_BUILD
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,6 @@ class BigInt {
|
||||||
BigInt(const BigInt&);
|
BigInt(const BigInt&);
|
||||||
BigInt(const long long&);
|
BigInt(const long long&);
|
||||||
BigInt(const std::string&);
|
BigInt(const std::string&);
|
||||||
static BigInt& RandLength(int size,BigInt base);
|
|
||||||
// Assignment operators:
|
// Assignment operators:
|
||||||
|
|
||||||
BigInt& operator=(const BigInt&);
|
BigInt& operator=(const BigInt&);
|
||||||
|
@ -136,10 +135,12 @@ class BigInt {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool is_valid_number(const std::string& num) {
|
bool is_valid_number(const std::string& num) {
|
||||||
for (char digit : num)
|
const char *p;
|
||||||
if (digit < '0' or digit > '9')
|
for (uint16_t i = 0;i < num.size();i++){
|
||||||
|
p = num.c_str();
|
||||||
|
if ((p[i] < '0') && (p[i] > '9'))
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -196,8 +197,8 @@ void add_trailing_zeroes(std::string& num, size_t num_zeroes) {
|
||||||
std::tuple<std::string, std::string> get_larger_and_smaller(const std::string& num1,
|
std::tuple<std::string, std::string> get_larger_and_smaller(const std::string& num1,
|
||||||
const std::string& num2) {
|
const std::string& num2) {
|
||||||
std::string larger, smaller;
|
std::string larger, smaller;
|
||||||
if (num1.size() > num2.size() or
|
if ((num1.size() > num2.size()) ||
|
||||||
(num1.size() == num2.size() and num1 > num2)) {
|
((num1.size() == num2.size()) && ( num1 > num2))) {
|
||||||
larger = num1;
|
larger = num1;
|
||||||
smaller = num2;
|
smaller = num2;
|
||||||
}
|
}
|
||||||
|
@ -270,7 +271,7 @@ BigInt::BigInt(const long long& num) {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
BigInt::BigInt(const std::string& num) {
|
BigInt::BigInt(const std::string& num) {
|
||||||
if (num[0] == '+' or num[0] == '-') { // check for sign
|
if ((num[0] == '+') || ( num[0] == '-')) { // check for sign
|
||||||
std::string magnitude = num.substr(1);
|
std::string magnitude = num.substr(1);
|
||||||
if (is_valid_number(magnitude)) {
|
if (is_valid_number(magnitude)) {
|
||||||
value = magnitude;
|
value = magnitude;
|
||||||
|
@ -395,20 +396,7 @@ BigInt& BigInt::operator=(const long long& num) {
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
range a data
|
|
||||||
----------------
|
|
||||||
return : base + rand
|
|
||||||
*/
|
|
||||||
BigInt& BigInt::RandLength(int size,BigInt base){
|
|
||||||
// biggest is 2048
|
|
||||||
if(size > 2048)
|
|
||||||
size = 2048;
|
|
||||||
|
|
||||||
|
|
||||||
BigInt ret();
|
|
||||||
|
|
||||||
}
|
|
||||||
/*
|
/*
|
||||||
BigInt = String
|
BigInt = String
|
||||||
---------------
|
---------------
|
||||||
|
@ -489,7 +477,7 @@ BigInt BigInt::operator-() const {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool BigInt::operator==(const BigInt& num) const {
|
bool BigInt::operator==(const BigInt& num) const {
|
||||||
return (sign == num.sign) and (value == num.value);
|
return ((sign == num.sign) && (value == num.value));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -530,7 +518,7 @@ bool BigInt::operator<(const BigInt& num) const {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool BigInt::operator>(const BigInt& num) const {
|
bool BigInt::operator>(const BigInt& num) const {
|
||||||
return !((*this < num) or (*this == num));
|
return !((*this < num) || (*this == num));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -540,7 +528,7 @@ bool BigInt::operator>(const BigInt& num) const {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool BigInt::operator<=(const BigInt& num) const {
|
bool BigInt::operator<=(const BigInt& num) const {
|
||||||
return (*this < num) or (*this == num);
|
return ((*this < num) || (*this == num));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -950,12 +938,12 @@ const long long FLOOR_SQRT_LLONG_MAX = 3037000499;
|
||||||
|
|
||||||
BigInt BigInt::operator+(const BigInt& num) const {
|
BigInt BigInt::operator+(const BigInt& num) const {
|
||||||
// if the operands are of opposite signs, perform subtraction
|
// if the operands are of opposite signs, perform subtraction
|
||||||
if (this->sign == '+' and num.sign == '-') {
|
if ((this->sign == '+') && (num.sign == '-')) {
|
||||||
BigInt rhs = num;
|
BigInt rhs = num;
|
||||||
rhs.sign = '+';
|
rhs.sign = '+';
|
||||||
return *this - rhs;
|
return *this - rhs;
|
||||||
}
|
}
|
||||||
else if (this->sign == '-' and num.sign == '+') {
|
else if ((this->sign == '-') && (num.sign == '+')) {
|
||||||
BigInt lhs = *this;
|
BigInt lhs = *this;
|
||||||
lhs.sign = '+';
|
lhs.sign = '+';
|
||||||
return -(lhs - num);
|
return -(lhs - num);
|
||||||
|
@ -978,7 +966,7 @@ BigInt BigInt::operator+(const BigInt& num) const {
|
||||||
result.value = std::to_string(carry) + result.value;
|
result.value = std::to_string(carry) + result.value;
|
||||||
|
|
||||||
// if the operands are negative, the result is negative
|
// if the operands are negative, the result is negative
|
||||||
if (this->sign == '-' and result.value != "0")
|
if ((this->sign == '-') && (result.value != "0"))
|
||||||
result.sign = '-';
|
result.sign = '-';
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
@ -993,12 +981,12 @@ BigInt BigInt::operator+(const BigInt& num) const {
|
||||||
|
|
||||||
BigInt BigInt::operator-(const BigInt& num) const {
|
BigInt BigInt::operator-(const BigInt& num) const {
|
||||||
// if the operands are of opposite signs, perform addition
|
// if the operands are of opposite signs, perform addition
|
||||||
if (this->sign == '+' and num.sign == '-') {
|
if ((this->sign == '+') && (num.sign == '-')) {
|
||||||
BigInt rhs = num;
|
BigInt rhs = num;
|
||||||
rhs.sign = '+';
|
rhs.sign = '+';
|
||||||
return *this + rhs;
|
return *this + rhs;
|
||||||
}
|
}
|
||||||
else if (this->sign == '-' and num.sign == '+') {
|
else if ((this->sign == '-') && (num.sign == '+')) {
|
||||||
BigInt lhs = *this;
|
BigInt lhs = *this;
|
||||||
lhs.sign = '+';
|
lhs.sign = '+';
|
||||||
return -(lhs + num);
|
return -(lhs + num);
|
||||||
|
@ -1064,7 +1052,7 @@ BigInt BigInt::operator-(const BigInt& num) const {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
BigInt BigInt::operator*(const BigInt& num) const {
|
BigInt BigInt::operator*(const BigInt& num) const {
|
||||||
if (*this == 0 or num == 0)
|
if ((*this == 0) || (num == 0))
|
||||||
return BigInt(0);
|
return BigInt(0);
|
||||||
if (*this == 1)
|
if (*this == 1)
|
||||||
return num;
|
return num;
|
||||||
|
@ -1072,7 +1060,7 @@ BigInt BigInt::operator*(const BigInt& num) const {
|
||||||
return *this;
|
return *this;
|
||||||
|
|
||||||
BigInt product;
|
BigInt product;
|
||||||
if (abs(*this) <= FLOOR_SQRT_LLONG_MAX and abs(num) <= FLOOR_SQRT_LLONG_MAX)
|
if ((abs(*this) <= FLOOR_SQRT_LLONG_MAX) && (abs(num) <= FLOOR_SQRT_LLONG_MAX))
|
||||||
product = std::stoll(this->value) * std::stoll(num.value);
|
product = std::stoll(this->value) * std::stoll(num.value);
|
||||||
else {
|
else {
|
||||||
// identify the numbers as `larger` and `smaller`
|
// identify the numbers as `larger` and `smaller`
|
||||||
|
@ -1167,7 +1155,7 @@ BigInt BigInt::operator/(const BigInt& num) const {
|
||||||
return -(*this);
|
return -(*this);
|
||||||
|
|
||||||
BigInt quotient;
|
BigInt quotient;
|
||||||
if (abs_dividend <= LLONG_MAX and abs_divisor <= LLONG_MAX)
|
if ((abs_dividend <= LLONG_MAX) && (abs_divisor <= LLONG_MAX))
|
||||||
quotient = std::stoll(abs_dividend.value) / std::stoll(abs_divisor.value);
|
quotient = std::stoll(abs_dividend.value) / std::stoll(abs_divisor.value);
|
||||||
else if (abs_dividend == abs_divisor)
|
else if (abs_dividend == abs_divisor)
|
||||||
quotient = 1;
|
quotient = 1;
|
||||||
|
@ -1224,11 +1212,11 @@ BigInt BigInt::operator%(const BigInt& num) const {
|
||||||
|
|
||||||
if (abs_divisor == 0)
|
if (abs_divisor == 0)
|
||||||
throw std::logic_error("Attempted division by zero");
|
throw std::logic_error("Attempted division by zero");
|
||||||
if (abs_divisor == 1 or abs_divisor == abs_dividend)
|
if ((abs_divisor == 1) || (abs_divisor == abs_dividend))
|
||||||
return BigInt(0);
|
return BigInt(0);
|
||||||
|
|
||||||
BigInt remainder;
|
BigInt remainder;
|
||||||
if (abs_dividend <= LLONG_MAX and abs_divisor <= LLONG_MAX)
|
if ((abs_dividend <= LLONG_MAX) && (abs_divisor <= LLONG_MAX))
|
||||||
remainder = std::stoll(abs_dividend.value) % std::stoll(abs_divisor.value);
|
remainder = std::stoll(abs_dividend.value) % std::stoll(abs_divisor.value);
|
||||||
else if (abs_dividend < abs_divisor)
|
else if (abs_dividend < abs_divisor)
|
||||||
remainder = abs_dividend;
|
remainder = abs_dividend;
|
||||||
|
|
Loading…
Reference in New Issue