Javascript 将字符串中的数字在特定位置相乘

Javascript 将字符串中的数字在特定位置相乘,javascript,arrays,string,numbers,Javascript,Arrays,String,Numbers,我正试图解决第八个项目的欧拉问题 在1000位数字中找出五个连续数字的最大乘积 我很确定我已经走远了。我还尝试了一个更简单的程序,使用while循环,每次返回1。我提供的代码每次也返回1 请不要为我提供解决方案。如果可以的话,给我一个地方看看。 这是我的密码: var bigNum = "73167176531330624919225119674426574742355349194934 96983520312774506326239578318016984801869478851843 858

我正试图解决第八个项目的欧拉问题

在1000位数字中找出五个连续数字的最大乘积

我很确定我已经走远了。我还尝试了一个更简单的程序,使用while循环,每次返回1。我提供的代码每次也返回1

请不要为我提供解决方案。如果可以的话,给我一个地方看看。 这是我的密码:

var bigNum = "73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450";

var pos1, pos2, pos3, pos4, pos5;

for(var i=1;i<=1000;i+=5) {
   for(var j=0;j<=995;j++) {
       pos1 = bigNum[j];
   }
   for(var k=1;k<=996;k++) {
       pos2 = bigNum[k];
   }
   for(var l=2;l<=997;l++) {
       pos3 = bigNum[l];
   }
   for(var m=3;m<=998;m++) {
       pos4 = bigNum[m];
   }
   for(var n=4;n<=999;n++) {
       pos5 = bigNum[n];
   }
   prod = pos1 * pos2 * pos3 * pos4 * pos5;
   if(prod>sum) {
       sum = prod;
   }
}
console.log(sum);
var bigNum=“7316717653133062491922511974426574742355349194934 96983520312774506326239578318016984801869478851843 85861560789112949495459501737958331952853208805511 12540698747158523863050715693290963295227443043557 66896648950445244523161731856403098711121722383113 62229893423380308135336276614282806444486645238749 30358907296290491560440772390713810515859307960866 70172427121883998797908792274921901699720888093776 65727333001053367881220235421809751254540594752243 52584907711670556013604839586446706324415722155397 53697817977846174064955149290862569321978468622482 83972241375657056057490261407972968652414535100474 82166370484403199890008895243450658541227588666881 16427171479924442928230863465674813919123162824586 17866458359124566529476545682848912883142607690042 24219022671055626321111109370544217506941658960408 07198403850962455444362981230987879927244284909188 84580156166097919133875499200524063689912560717606 05886116467109405077541002256983155200055935729725 71636269561882670428252483600823257530420752963450"; 变量pos1、pos2、pos3、pos4、pos5;
对于(var i=1;i,只要想想代码中发生了什么


输入第一个for循环,然后输入第二个for循环。分配pos1=j,然后循环(j仍然我不确定没有示例可以说什么,这会导致真正的解决方案

我要做的是循环遍历字符串,取一个5个字符的片段,拆分这5个字符,并在必要时将它们转换为数字,找到它们的产品,检查它是否是迄今为止最大的,如果是,则保存,取下5个,冲洗并重复

我不知道为什么你有这么多的循环,而你只需要1个

no code displayed

对于那些希望看到

的人来说,一个解决方案正在启动。你应该尝试一种更系统的方法来解决这个问题,而不是一下子就跳进代码

首先,看看你是否能用较小的输入手工解决这个问题。例如,以原始输入字符串的前10位:
7316717653
。现在试着在纸上解决这个问题(可能是用计算器,呵呵)。可能是这样的

7*3*1*6*7 = 882
3*1*6*7*1 = 126
1*6*7*1*7 = 294
6*7*1*7*6 = 1764
7*1*7*6*5 = 1470
1*7*6*5*3 = 630
1764
下一步是如何将其转换为代码。让我们先写下上面所做的工作:

1) Start from the leftmost point
2) Take the next five numbers
3) Multiply them
4) Store the output
5) Shift to the right once
6) Repeat starting at 2), until there aren't five numbers left to process
7) Look through all of the products (the output of the multiplication)
8) Output the max
现在的挑战是将其转换为代码。因为您不需要解决方案,所以我将此留给您。但似乎您在循环构造方面遇到了一些问题,因此我可以给您一个提示:

for(var i=1; i <= 1000; i+=5) {
    // code here
}
因此,在问题的上下文中,您可能需要一个循环来跟踪当前最左边的点。它将从0开始,每次递增1,并将从末尾停止五个插槽,这意味着:

...823257530420752963450
                   ^
在那里

最后,我要补充一点,您将按照我的建议生成的代码有点低效。但是,当您查看代码时,您会发现一些简单的方法使其更快,这感觉非常棒!希望您能够找到解决方法。但是请记住,project euler没有时间限制,上面的解决方案仍然会运行得非常快(在javascript中可能需要几秒钟?肯定比在C中少一秒钟)

1) Take a variable 'i' and set it to 1
2) While 'i' is less than or equal to 1000 execute "code here"
3) Increment 'i' by 5
...823257530420752963450
                   ^