0

我做了一些简单的代码来测试一个数字,看看它是否是一个素数,但是在给它输入大素数来测试程序在 arduino 上的速度时,它只需要一个长度为 9-/ under-digits 我测试了我的读取函数,它返回整个数字,但“BigNumber”不会解析它,它只是说它的 0

代码:

void Speed(String num)
{
    Serial.println("NUM="+num);
    BigNumber NUM = num.c_str();//this is where it fails
    BigNumber Curr = "1";//start 2 / 'curr++' start of loop
    num = "";
    ... the testing of prime numbers here

如果我输入一个 10 位数字,代码会停止 arduino,输出是这样的

<|S 1234567891
>|NUM=1234567891

如果我输入一个 9 位数字,它会按预期输出

<S 123456789
>|NUM=123456789
>|123456789 is not a prime number 
>|because ist a factor of 3

我试过看看是否有人和我有同样的问题,但我在任何地方都找不到。

我用的是 arduino-uno

编辑:在做了更多测试之后,它现在没有设置在测试“S 1111111111”(10 位)后崩溃的次数,它的输出是正常的:

<|S 1111111111
>|NUM=1111111111
>|1111111111 is not a prime number 
>|because ist a factor of 11

但是如果我输入 11 位数字,它会解析为 0 ??

<|S 11111111111
>|NUM=11111111111
>|0 cant be a prime number because it doesn't end in 1,3,7,9

bty:我忘了提到'S number_here' S 指定了查找结果的方法我也有 D=DataCrunch 它检查所有数字和 L=List 女巫创建一个找到的素数列表,就像素数搜索一样,thay工作正常,除了 DataCrunch (D) 在解析给定数字时有同样的问题。

EDIT2:这证明 BigNumber 在第一篇文章中可以容纳如此大的数字 https://forum.arduino.cc/index.php?topic=85692.0

4

1 回答 1

0

因此,经过一些广泛的研究后发现,BigNumber 不适合非常大的数字,但“BigNumber.h”库的另一部分执行其 bc_num。

bc_num x;
bc_str2num(&x, "9898989898", 10);
String c = "Controll=";
c+=bc_num2str(x);
Serial.println(c);

输出

Controll=9898989898

但是正如你所看到的,这需要更多的编程才能实现,所以我要离开,现在开始再见。

于 2017-09-28T17:27:07.523 回答