Я создал алгоритм деления в столбик на C++, но не могу понять, как правильно разместить десятичную точку. Я начинаю думать, что мне нужно переделать алгоритм.
std::string LoneFunctions::divideDecimalStrings(const std::string& num1, const std::string& num2, int precision)
{
int stringDP1 = LoneFunctions::findCh('.',num1);
int stringDP2 = LoneFunctions::findCh('.',num2);
std::string usedString1 = num1;
std::string usedString2 = num2;
int numDecimals,st1Decimals,st2Decimals;
if(stringDP1 != -1)
{
usedString1.erase(stringDP1,1);
st1Decimals = usedString1.size() - stringDP1;
} else
{
st1Decimals = 0;
}
if(stringDP2 != -1)
{
usedString2.erase(stringDP2,1);
st2Decimals = usedString2.size() - stringDP2;
;
} else
{
st2Decimals = 0;
}
numDecimals = st1Decimals + st2Decimals;
std::string result;
std::string current = "";
std::string temp = "";
std::string tempB = "";
std::string quotient = "";
int numOfDigits = 0;
int n = usedString1.size();
for(int i = 0; i < n; ++i)
{
current = usedString2;
temp += usedString1;
int count = 0;
while (LoneFunctions::compareStrings(temp, current) || LoneFunctions::isEqual(temp,current)) {
temp = subtractStrings(temp,current);
count++;
}
quotient += std::to_string(count);
numOfDigits++;
}
if (precision > 0) {
for (int i = 0; i < precision; ++i) {
temp += '0';
while (temp.size() > 1 && temp[0] == '0') temp.erase(0, 1);
while (quotient.size() > 1 && quotient[0] == '0') quotient.erase(0, 1);
int count = 0;
while (compareStrings(temp, usedString2) || isEqual(temp, usedString2)) {
temp = subtractStrings(temp, usedString2);
++count;
}
result += std::to_string(count);
}
}
quotient += result;
return quotient;
}
Это была одна из моих попыток заставить это работать, но она не сработает из-за ведущих нулей и особенностей работы этого алгоритма.
if (numDecimals > 0) {
quotient.insert(quotient.size() - precision - numDecimals, 1, '.');
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... imal-point
Длинная десятичная точка [закрыто] ⇐ C++
Программы на C++. Форум разработчиков
1735586350
Anonymous
Я создал алгоритм деления в столбик на C++, но не могу понять, как правильно разместить десятичную точку. Я начинаю думать, что мне нужно переделать алгоритм.
std::string LoneFunctions::divideDecimalStrings(const std::string& num1, const std::string& num2, int precision)
{
int stringDP1 = LoneFunctions::findCh('.',num1);
int stringDP2 = LoneFunctions::findCh('.',num2);
std::string usedString1 = num1;
std::string usedString2 = num2;
int numDecimals,st1Decimals,st2Decimals;
if(stringDP1 != -1)
{
usedString1.erase(stringDP1,1);
st1Decimals = usedString1.size() - stringDP1;
} else
{
st1Decimals = 0;
}
if(stringDP2 != -1)
{
usedString2.erase(stringDP2,1);
st2Decimals = usedString2.size() - stringDP2;
;
} else
{
st2Decimals = 0;
}
numDecimals = st1Decimals + st2Decimals;
std::string result;
std::string current = "";
std::string temp = "";
std::string tempB = "";
std::string quotient = "";
int numOfDigits = 0;
int n = usedString1.size();
for(int i = 0; i < n; ++i)
{
current = usedString2;
temp += usedString1[i];
int count = 0;
while (LoneFunctions::compareStrings(temp, current) || LoneFunctions::isEqual(temp,current)) {
temp = subtractStrings(temp,current);
count++;
}
quotient += std::to_string(count);
numOfDigits++;
}
if (precision > 0) {
for (int i = 0; i < precision; ++i) {
temp += '0';
while (temp.size() > 1 && temp[0] == '0') temp.erase(0, 1);
while (quotient.size() > 1 && quotient[0] == '0') quotient.erase(0, 1);
int count = 0;
while (compareStrings(temp, usedString2) || isEqual(temp, usedString2)) {
temp = subtractStrings(temp, usedString2);
++count;
}
result += std::to_string(count);
}
}
quotient += result;
return quotient;
}
Это была одна из моих попыток заставить это работать, но она не сработает из-за ведущих нулей и особенностей работы этого алгоритма.
if (numDecimals > 0) {
quotient.insert(quotient.size() - precision - numDecimals, 1, '.');
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79317384/long-decimal-point[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия