1
procedure DoSomething(a_1, ... a_n)
 p = a_1
 for i = 2 to n
  temp = p
  for j = 1 to a_i
   p = p * temp

DoSomething(10,2,2,2)

我们得到了喜忧参半的结果。我们中的一个得到 10^7,另一个得到 10^27。

我想我发现了我的错误......我每次都用 10 代替 p,而不是用新的 temp 值。

编辑:这是我的工作:

{10, 2, 2, 2}
p = 10
i = 2 to 4
 temp = p = 10
 j = 1 to 2
  p = 10 * 10 = 10^2
  p = 10^2 * 10 = 10^3
i = 3 to 4
 temp = 10^3
 j = 1 to 2
  p = 10^3 * 10 = 10^4
  p = 10^4 * 10 = 10^5
i = 4 to 4
 temp = 10^5
 j = 1 to 2
  p = 10^5 * 10 = 10^6
  p = 10^6 * 10 = 10^7

10^7

4

7 回答 7

5

这是 10^27,如这段 python 代码所示:

a = [10,2,2,2]
p = a[0]
for i in range(1,len(a)):
    temp = p
    for j in range(a[i]):
        p *= temp
print p

1,000,000,000,000,000,000,000,000,000

您发布的代码的问题是:

  • 在您的 10^7 解决方案中,您总是乘以 10,而不是 temp(在 j 循环之后增加到 p 的最终值)。
  • 您在 PHP 代码中将 temp 设置为 arr[i],而不是 p(我将在此处包含它,因此在您将其从问题中编辑出来后,我的回答仍然有意义 :-)。

    $arr = array(10, 2, 2, 2);
    $p = $arr[0];
    $temp = 0;
    for($i = 1; $i <= 3; $i++)
    {
        $temp = $arr[$i];
        for($j = 0; $j <= $arr[$i]; $j++)
        {
            $p = $p * $temp;
        }
    }
    echo $p;
    
于 2009-01-30T06:50:22.000 回答
2

我将程序输入到我的 TI-89 中,得到 p 值的 1e27 答案。

t(a)
Func
  Local i,j,p,tmp
  a[1]->p
  For i,2,dim(a)
    p->tmp
    For j,1,a[i]
      p*tmp->p
    EndFor
  EndFor
  Return p
EndFunc

t({10,2,2,2})       1.E27
于 2009-01-30T06:42:42.593 回答
1

不是 ((10^3)​​^4)^5 = 10 ^ 60 吗?

于 2009-01-30T06:46:32.897 回答
1

似乎是一个计算函数


(((a_1^(a_2+1))^(a_3+1))^(a_4+1)...

因此我们得到 ((10^3)​​^3)^3 = 10^(3^3) = 10^27

于 2009-01-30T06:56:35.343 回答
1

计算 10^7 时出现错误,请参见下文。正确答案是 10^27 {10, 2, 2, 2}

p = 10
i = 2 to 4
 temp = p = 10
 j = 1 to 2
  p = 10 * 10 = 10^2
  p = 10^2 * 10 = 10^3
i = 3 to 4
 temp = 10^3
 j = 1 to 2
  p = 10^3 * 10 = 10^4 -- p=p*temp, p=10^3 and temp=10^3, hence p=10^3 * 10^3.
  p = 10^4 * 10 = 10^5 -- Similarly for other steps.
i = 4 to 4
 temp = 10^5
 j = 1 to 2
  p = 10^5 * 10 = 10^6
  p = 10^6 * 10 = 10^7
于 2009-01-30T06:59:54.807 回答
0

人们将 Python 称为“可执行伪代码”是有原因的:

>>> def doSomething(*args):
...     args = list(args);
...     p = args.pop(0)
...     for i in range(len(args)):
...         temp = p
...         for j in range(args[i]):
...           p *= temp
...     return p
...
>>> print doSomething(10,2,2,2)
1000000000000000000000000000
于 2009-01-30T06:39:14.487 回答
0

在 C 中:

#include <stdio.h>

double DoSomething(double array[], int count)
{
  double p, temp;
  int i, j;

  p = array[0];

  for(i=1;i<count;i++)
  {
    temp = p;
    for(j=0; j<array[i];j++)
    {
      printf("p=%g, temp=%g\n", p, temp); /* useful to see what's going on */
      p = p * temp;
    }
  }
  return p; /* this isn't specified, but I assume it's the procedure output */
}

double array[4] = {10.0,2.0,2.0,2.0};

int main(void)
{
  printf("%g\n", DoSomething(array, 4));
  return 0;
}

而且,正如其他人所指出的那样,10e27。请注意,上面的伪代码非常冗长 - 它可以通过多种方式进行简化。

我使用了Tiny C 编译器- 非常小、轻巧且易于使用,可以处理像这样的简单内容。

-亚当

于 2009-01-30T06:53:41.370 回答