给出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;
}
答案 0 :(得分:1)
您的代码中存在一些问题。
正如另一个答案所指出的,您的power
函数已损坏:
ans
未初始化{
}
else
在while
中,您计算了x^x
,但是忘记了结果,
应该加起来。
在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
,该变量看起来很破损,因此我简化了它。
当然,这很容易发生整数溢出。