问题包括两个数字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");
}
答案 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);
}