gpt4 book ai didi

arrays - 将单个 long long 数字传输到 int 数组的错误

转载 作者:行者123 更新时间:2023-12-02 19:09:16 25 4
gpt4 key购买 nike

我试图获取一个 Long Long Int 并将每个位置数字拆分到数组中自己的位置,当然按顺序排列,数组 [0] 是最大的数字。

例如,如果数字是 314,则 array[0] = 3、array[1] =1 和 array[2] = 4。

这是微 Controller 计算器项目的一部分,我正在其中编写图形库(为了好玩)并使用数组来显示每一行。

问题是,它需要能够处理非常大的数字(9,999,999,999+),而我正在处理这些大数字。如果 Long Long < 1,000,000,它会完美地写入所有数字,但是我添加的数字越多,它们在最后都会开始写错。

例如,1,234,567,890 显示为 1,234,567,966。

这是我正在使用的代码片段:

long long int number = 1234567890;
int answerArray[10];
int numberLength = 10;

for(writeNumber = 0; writeNumber < numberLength; writeNumber++)
{
answerArray[writeNumber] = ((int)(number / pow(10, (numberLength - 1 - writeNumber))) % 10;
}

我相当确定这与“%”和多种数据类型有关,因为 Int 范围内的任何数字都可以完美工作。

你能看出我错在哪里吗?有更好的方法实现我的目标吗?对于大量数据有什么建议吗?

最佳答案

pow的签名是

double pow(double x, double y);

当您调用该函数时,计算将隐式使用浮点。这就是为什么它不再像纯整数运算那样精确。

此外,您必须小心如何转换为 int

在你的问题中,你有

((int)(number / pow(10, (numberLength - 1 - writeNumber))) % 10;

括号不匹配,所以我假设您的意思是:

(int)(number / pow(10, (numberLength - 1 - writeNumber))) % 10;

但是,在应用模 10 运算之前,您在这里转换的数字可能超出 int 的范围。这可能会导致整数溢出。该代码的作用与您编写的相同:

((int)(number / pow(10, (numberLength - 1 - writeNumber)))) % 10;

为了避免溢出,最好先执行取模运算。然而,此时您正在隐式处理 double (因为 pow),所以它也不理想。最好坚持使用纯整数运算以避免这些陷阱。

关于arrays - 将单个 long long 数字传输到 int 数组的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64564485/

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