gpt4 book ai didi

c++ - 函数中的错误添加

转载 作者:行者123 更新时间:2023-11-27 22:42:15 25 4
gpt4 key购买 nike

我正在用 C++ 编写一个函数,将数字从某个基数转换为十进制。当位数为偶数时它工作正常,但当它是奇数时它给出错误的答案。

例如:

Number to convert : 100 
Base to convert to: 10
Correct answer : 100
Function's output : 99

代码如下:

unsigned long long convertToDecimal(const std::string& number, const unsigned base)
{
std::string characters = "0123456789abcdef";
unsigned long long res = 0;

for(int i = 0, len = number.size(); i<len; ++i)
{
res += characters.find(number.at(i))*std::pow(base, len-1-i);
}
return res;
}

我正在使用 g++ C++11。

最佳答案

我无法重现您的特定问题,但是 std::pow 返回一个 float ,并且您的实现可能引入了某种舍入错误,导致在转换为 unsigned long long.

为避免这些错误,在处理整数时,您应该考虑完全避免 std::pow。例如,您的函数可以这样写:

#include <iostream>
#include <string>
#include <cmath>

unsigned long long convertToDecimal(const std::string& number, const unsigned base)
{
std::string characters = "0123456789abcdef";
unsigned long long res = 0;
unsigned long long power = 1;

for(auto i = number.crbegin(); i != number.crend(); ++i)
{
// As in your code, I'm not checking for erroneous input
res += characters.find(*i) * power;
power *= base;
}
return res;
}

int main ()
{
std::cout << convertToDecimal("100", 2) << '\n'; // --> 4
std::cout << convertToDecimal("1234", 8) << '\n'; // --> 668
std::cout << convertToDecimal("99999", 10) << '\n'; // --> 99999
std::cout << convertToDecimal("fedcba", 16) << '\n'; // --> 16702650
}

关于c++ - 函数中的错误添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47856240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com