我正在使用一个名为add(BigDecimals c)的函数,该函数不断出现错误提示,并非所有控制路径都返回值:
BigDecimal BigDecimal::add(BigDecimal c)
{
string fFirst = to_string(this->fraction()); //fraction part of the first number
string fSecond = to_string(c.fraction()); //fraction part of the second number
if (fFirst.length() < fSecond.length()) //fraction part of first/second number
{
string str(this->toString()); //convert fraction to string
for (unsigned int i = 0; i < fFirst.length() - fSecond.length(); i++) //difference between first and second
{
str += "0"; //pad in the 0's
}
this->equals(str); //call the equals function
}
if (fSecond.length() < fFirst.length()) //flip numbers around, second < first
{
string str(this->toString()); //convert fraction to string
for (unsigned int i = 0; i < fSecond.length() - fFirst.length(); i++) //difference between second and first
{
str += "0"; //pad in the 0's
}
this->equals(str); //call the equals function
}
for (unsigned int i = fSecond.length(); i > 0; i++)
{
int carryFlag = 0; //carry flag set to 0
int sum = carryFlag + stoi(this->at(i).toString()) + stoi(c.at(i).toString());
if (sum >= 10) //greater than 10
{
carryFlag = 1;
sum = sum % 10;
}
else //less than 10
{
carryFlag = 0; //set carry flag to 0
}
return BigDecimal(to_string(sum)); //this is the only thing I want to
//return
}
//It wants to return something here, but I am not sure what.
}
我试图通过用else语句替换if语句来解决此问题,但实际上没有任何效果。我不知道如何解决此错误,所以我们将不胜感激!
答案 0 :(得分:3)
您的逻辑有缺陷(错误消息以及您不知道该怎么做的事实很好地表明了这一点。
您的代码将始终在循环的第一次迭代中返回。显然,您想要做的是一次将一个数字字符串累加一次,但这并不是您编写的代码所做的。
这更像是您想要的东西。但是,我认为您还有其他与数字填充有关的错误,因此此代码无法正常工作,但希望能给您一些提示。
string result = "";
int carryFlag = 0; //carry flag set to 0
for (unsigned int i = fSecond.length(); i > 0; i--)
{
int sum = carryFlag + stoi(this->at(i).toString()) + stoi(c.at(i).toString());
if (sum >= 10) //greater than 10
{
carryFlag = 1;
sum = sum % 10;
}
else //less than 10
{
carryFlag = 0; //set carry flag to 0
}
result = to_string(sum) + result;
}
if (carryflag)
result = "1" + result;
return BigDecimal(result);
请注意,返回仅在循环结束之后进行,每次循环时,都会生成一个名为result的新变量来累加数字。
还要注意,carryflag
变量已移出循环。进位的全部要点是保持从循环的一次迭代到下一次迭代的进位,因此它不能在循环内部。另外,如果在添加完所有数字后还剩下一个进位,则需要在结果的开头添加一个数字。
我还在循环中将i++
更改为i--
。您正在向后遍历要添加的字符串,因此需要i--
。这是一种即兴创作,但正如我之前所说,我仍然认为此循环是错误的。
您很清楚您知道如何进行加法运算,但是您还没有掌握如何将其转换为代码。您必须非常仔细和精确地考虑要计算机执行的操作。