2

可能的重复:
是否有用于 JavaScript 的 bignum 库?
JavaScript 中 Number 方法的奇怪语法

我刚刚写了一些代码来找出一个Project Euler问题。

我一直在...

Uncaught SyntaxError: Unexpected token ILLEGAL

我在代码中看不到语法错误...

我使用的号码是 1000 位长。我在 Chrome 的控制台中运行

Number.MAX_VALUE >  7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450

并得到false. 真可惜。

是否有可以运行我的代码的解释器?

如果需要,这是代码...

var num = 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450.toString();

var max = 0,
    length = num.length;

for (var i = 0; i < length; i++) {
     
     var consecTotal = 1,
         limit = i + 5;
      
      for (var j = i; j < limit; j++) {
        consecTotal *= parseInt(num.substr(j, 1), 10);
      }
      
      max = Math.max(max, consecTotal);
      
}

console.log(max);

问题是找到5个连续数字乘积的最大数字。我不会逐字逐句输入,因为我认为 Project Euler 对在线发布的答案不屑一顾(我什至不确定我的答案是否可行)。

我转向 JavaScript,因为我不确定如何设置 anint来处理 C 中的数字。

4

3 回答 3

4

要实际解释Uncaught SyntaxError: Unexpected token ILLEGAL.

造成这种情况的原因其实是...

...20752963450.toString();
              ^-------- ...the dot after a number is treated as a decimal point
                        Therefore this doesn't make sense.
                        But if you add a space in front of the dot, then it will work because
                        now JavaScript uses it to access the toString() method.

12323 .toString() // this will work as you'd expect it to if you come from Ruby or the like

不过,如果你添加空间num将是无限的。因此,您必须查看 awoodland 的 BigNum 实现答案。

于 2010-10-29T15:34:47.600 回答
2

听起来你正在寻找一个大的 num 类。似乎有一个用于Javascript的,如果你想用 C 语言来做,你可以使用gmp

于 2010-10-29T15:15:33.463 回答
0

首先,如果您想将 num 变量用作字符串,则它应该是正确的字符串文字。这就是你似乎正在做的事情。我从来没有见过你试图在那里使用的符号,我无法让它在 Chrome 或 IE 中工作。只需使用:

var num = '73167176531330....';

其次,您的内部循环永远不会终止。j 总是小于 j + 5。你的意思是 j < i + 5 吗?

第三,你需要让你的外循环只到 i < 长度 - 4。否则当 i 接近结束长度时,你将在你的内循环中溢出然后结束你的“num”字符串。

如果我做出这些改变,我会得到答案。不知道是不是你要的答案。

于 2010-10-29T15:37:48.473 回答