计算直到n-1的所有数字的幂

时间:2018-09-27 09:04:50

标签: c

给出n,程序应计算1 ^ 1 + 2 ^ 2 + 3 ^ 3 + ...直到n-1 ^ n-1。下面是我的代码,其中while循环中有一个函数,并且传递的值来自该函数中的n-1。函数定义有两个返回ans的变量。输出总是错误的1。

#include <stdio.h>
#include <stdlib.h>

int power(int x, int y)
{
    int la, ans;
    if(y==0)
        return 1;
    else
        la= (x*power(x, y-1));  
        ans+=la;
        return ans;
}
int main()
{
    int t;
    scanf("%d", &t);
    while(t--)
    {
        int n, m, a, b, res, res1;
        scanf("%d%d", &n, &m);
        while(n-- && n>0)
        {
            a = power(n-1, n-1);
        }
        printf("%d", a);
    }
    return 0;
}

2 个答案:

答案 0 :(得分:1)

您的代码中存在一些问题。

  1. 正如另一个答案所指出的,您的power函数已损坏:

    • ans未初始化
    • { 之后丢失了
    • } else
  2. while中,您计算​​了x^x,但是忘记了结果, 应该加起来。

  3. while循环中要做的第一件事是减少n并计算power(n-1, n-1) 听起来不合逻辑。

因此,您更正后的代码可能是:

#include <stdio.h>
#include <stdlib.h>

int power(int x, int y)
{
    if(y==0)
        return 1;
    else
        return x*power(x, y-1);  
}
int main()
{
    int t;
    scanf("%d", &t);
    while(t--)
    {
        int n, m, b, a = 0;
        scanf("%d%d", &n, &m);
        while(n>1)
        {
            --n;
            b = power(n, n);
            a += b;
            printf("%d^%d -> %3d\n",n, n, b);                
        }
        printf("sum= %d", a);
    }
    return 0;
}

给n = 6的礼物:

5^5 -> 3125
4^4 -> 256
3^3 ->  27
2^2 ->   4
1^1 ->   1
sum=3413

答案 1 :(得分:0)

C使用花括号来形成块,您的power()函数似乎要像在Python中那样使用缩进。

可能应该是:

int power(int x, int y)
{
    int la, ans;
    if(y==0)
        return 1;
    else
    {
        la= (x*power(x, y-1));  
        ans+=la;
        return ans;
    }
}

当然,由于第一个if具有return,因此else是毫无意义的,您可以简化代码:

int power(int x, int y)
{
    if (y==0)
        return 1;
    return x * power(x, y-1);
}

从未分配过变量ans,该变量看起来很破损,因此我简化了它。

当然,这很容易发生整数溢出。