在C ++中为unsigned long int传递了错误的值

时间:2017-12-14 12:55:59

标签: c++

我有一个以unsigned long int作为输入的程序,所有后续函数都应该接收这样的值。

但是,在main函数中,当输入18446744073709551557时,它将返回为34359738363435973836,并且当该值传递给另一个函数时,它将被视为3435973836。

为什么会这样?

修改

主要功能如下:

int main()
{
    // initalise variables
    std::list<unsigned long int> results;
    unsigned long int n;

    // request user input
    std::cout << "Enter a number: ";
    std::cin >> n;
    std::cout << "You entered: " << n << std::endl;

    // populate results list
    results = primeFactors(n);
    results.sort();

    // display results
    std::cout << "Factors for " << n << " are: ";
    for (int i : results)
    {
        std::cout << i << " ";
    }

    return 0;
}

将值传递给函数:

std::list<unsigned long int> primeFactors(unsigned long int n)
{
    // initialise variables
    std::list<unsigned long int> factors;
    bool complete = false;
    unsigned long int ans1 = 0;
    unsigned long int ans2 = 0;

    std::cout << n;

(第二个函数中有很多代码,所以我还没有把它全部包含在内)

2 个答案:

答案 0 :(得分:2)

您的输入数字太大,无法存储为无符号长整数。

您可以查看各种类型here

的限制

我建议使用一个可以处理任意大数字的库,例如Boost.multiprecision

答案 1 :(得分:0)

我不认为18446744073709551557是有效的unsigned long int。

它已超过极限。 c ++数据类型的限制为here...

尝试限制之间的值。如果那时也无法帮助我们查看代码片段并检测错误。