代码之家  ›  专栏  ›  技术社区  ›  alex

是否有任何JavaScript解释程序可以处理非常大的数字?[副本]

  •  2
  • alex  · 技术社区  · 14 年前

    可能的重复:
    Is there a bignum library for JavaScript?
    Strange syntax of Number methods in JavaScript

    我刚刚写了一些代码 Project Euler 问题。

    我一直在。。。

    Uncaught SyntaxError:意外的标记非法

    我不能 我代码中的语法错误。。。

    我用的号码有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个连续数字的乘积。我不会逐字逐句地输入,因为我认为欧拉项目不喜欢在线发布答案(我甚至不确定我的答案是否可行)。

    我转向JavaScript是因为我不知道如何设置 int 来处理C中的数字。

    3 回复  |  直到 8 年前
        1
  •  4
  •   Ivo Wetzel    14 年前

    要真正解释 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

        2
  •  2
  •   Community CDub    8 年前

    听起来你在找一个大的num类。好像有一个 Javascript 如果你想用C语言写,你可以用 gmp .

        3
  •  0
  •   DMKing    14 年前

    var num = '73167176531330....';
    

    第二,你的内在循环永远不会终止。j永远小于j+5。你是说j<i+5吗?

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

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