单长长整型的Buggy传输到int数组

如何解决单长长整型的Buggy传输到int数组

我正在尝试获取Long Long Int,并按照顺序将每个地名按顺序分成数组中自己的位置,其中array [0]是最大数字。

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

这是一个微控制器计算器项目的一部分,我在其中编写图形库(出于娱乐目的)并使用数组显示每一行。

问题是,它需要能够处理非常大的数字(9,999,999+),而我正在处理具有大数目的戏剧。如果Long Long

例如,1,234,567,890显示为1,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),因此也不理想。最好坚持使用纯整数运算以避免这些陷阱。

,

您的问题是,您正在将可能非常大的数字投射到int中。查看writeNumbernumberLength-1时的迭代。在这种情况下,您要将long long除以1,然后将结果强制为int。一旦number变得大于2 ^ 31-1,您就会遇到问题。

您应该完全删除强制类型转换以及对pow的调用。取而代之的是,您应该迭代修改下一个数字,方法是将其除以10,然后将number(或其副本)除以10。

例如

int index = sizeof(answerArray)/sizeof(answerArray[0]);
for (long long x=number; x>0; x /= 10) {
    answerArray[--index] = x%10;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?