2

我一直在研究一些基本的编码,我正在努力找出扫描到整数的正确方法,第一个是我的 x 变量,第二个是 x 被提升到的 n。我尝试 5^5 并使用我当前的代码返回 -287648。

#include <stdio.h>
#include <math.h>

void x_to_the_n (void)
{
    int x=0;
    int n =0;
    long int y;
    printf("Enter a integer for X and N\n");
    scanf("%i\n%i\n",&x,&n);
        y=pow(x,y);
        printf("%i \n",y);
}

int main(void)
{
    x_to_the_n ();
    return 0;
}   
4

3 回答 3

9

我很确定你的意思是:

y = pow(x, n);
          ~~

你会得到一个“奇怪”的结果,因为y它从来没有被初始化为任何东西;你正在提升x(一些垃圾)的力量并把垃圾拿出来。

请注意,正如@0A0D 在评论中建议的那样,如果您要使用更多描述性变量,这个问题会更加明显:

int base = 0;
int exponent = 0;
long int result;
printf("Enter the base and exponent, on separate lines\n");
scanf("%i\n%i\n", &base, &exponent);
result = pow(base, result);
                   ~~~~~~~ oops!

此外,正如@icepack 所提到的,因为y是 a long int,格式应该是%li(不是%i):

printf("%li\n", y);
于 2013-03-13T19:06:37.413 回答
0

您正在使用y未初始化为pow()函数参数的那个。

这会导致结果溢出。

于 2013-03-13T19:08:29.370 回答
-2

如果您需要一个函数来进行整数求幂,您可以尝试这样的事情

#include <stdio.h>
unsigned int_pow(int n, unsigned x);
int main(void)
{
    int n, x;    
    printf("Enter an integer (n) followed by the power (x) to raise to: ");
    scanf("%i %i", &n, &x);    
    printf("%i^%i = %i\n", n, x, int_pow(n, x));    
    return 0;
}
unsigned int_pow(int n, unsigned x)
{
    unsigned i, a = n;
    switch (x)
    {
      case 0:
        return 1;
      case 1:
        return n;
      default:
        for (i = 1; i < x; ++i) {
             a *= n;
        }
        break;
    }
    return a;
}

您可能需要添加一些代码来检查传递给函数的错误值。大指数将溢出 unsigned int 数据类型。您可以编写函数以返回 unsigned long 并为形式参数 x 采用 unsigned long 来处理更大的数字,但如果您知道您将处理大量数字,您可能应该使用浮点类型。

如果您知道返回值必须用作整数类型,那么此代码运行良好并保存任何类型转换。希望它有所帮助。

于 2014-12-22T07:20:38.237 回答