整数幂c

时间:2013-03-13 19:04:55

标签: c integer

我一直在研究一些基本的编码,我正在努力寻找正确的扫描方法,第一个是我的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;
}   

3 个答案:

答案 0 :(得分:9)

我很确定你的意思是:

y = pow(x, n);
          ~~

你得到了一个奇怪的&#34;结果是因为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所提到的,由于ylong int,因此格式应为%li(不是%i):

printf("%li\n", y);

答案 1 :(得分:0)

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

这会导致结果溢出。

答案 2 :(得分:-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,并使用unsigned long来形成正式参数x以处理更大的数字,但如果你知道你将处理大数字,你可能应该使用float类型。

如果您知道返回的值必须用作整数类型,那么此代码可以正常工作并保存任何类型转换。希望它有帮助。