C - 使用Array的大数字a ^ b的权力

时间:2014-10-07 19:20:02

标签: c

问题包括两个数字a和b,答案是a ^ b的数字之和。

我写了下面的代码。它在所有情况下都给出了正确的结果。但是当输入是这样的< b,然后在给出正确的答案后,我得到了分段错误。

我尝试了很多调试但无法识别问题。任何帮助将不胜感激。

提前致谢..!

#include<stdio.h>

void power (int, int, int *product);
int main()
{
    int a,b,product[200];
    scanf("%d %d",&a, &b);
    power(a,b,product);
    return 0;
}

void power(int a, int b, int *product)
{
    int i,m,j,x,temp,sum=0;
    int *p = product;
    *(p+0)=1; //initializes array with only 1 digit, the digit 1
    m=1; // initializes digit counter
    temp=0; //Initializes carry variable to 0.
    for(i=1;i<=b;i++)
        {
            for(j=0;j<m;j++)
            {
               x = (*(p+j))*a+temp;
               *(p+j)=x%10; 
               temp = x/10; 
            }
             while(temp>0) //while loop that will store the carry value on array.
             { 
               *(p+m)=temp%10;
               temp = temp/10;
               m++; 
             }
    }
    //Printing result
    for(i=m-1;i>=0;i--) 
              sum = sum + *(p+i);
    printf("\n%d",sum);
              printf("\n");
}

1 个答案:

答案 0 :(得分:0)

我希望下面的代码能够完成你想做的事情。这很简单,也很好看。

#include<stdio.h>

void power (int, int);
int main()
{
   int a,b;
   scanf("%d %d",&a, &b);
   power(a,b);
   return 0;
}

void power(int a, int b)
{
   int c=1,sum=0;
   while(b>0)
   {   
      c = c*a;
      b--;
   }   
   printf("%d\n",c);
   while(c!=0)
   {   
      sum = sum+(c%10);
      c =c/10;
   }   
   printf("%d\n",sum);

}