我试图在KARATSUBA MULTIPLICATION上编写一个程序,但是只要我输入第二个数字就会显示出一个分段错误(核心转储)错误。
我还没有将所有案例都包括在程序中(只是两个数字相等的数字)。我很陌生,因此无法使用GDB解决问题。
#include<stdio.h>
#include <math.h>
int pro(int,int);
int digits(int);
int main()
{
int s,q,r;
printf("enter the two no.");
scanf("%d",&s);
scanf("%d",&q);
r=pro(s,q);
printf("the product is %d",r);
return 0;
}
int pro(int x,int y)
{
int dig,a,b,c,d,p1,p2,p3,p;
dig=digits(x);
if(dig>1){
b=x%((int)pow(10,(d/2)));
a=x/pow(10,(d/2));
d=y%((int)pow(10,(d/2)));
c=y/pow(10,(d/2));
p1=pro(a,c);
p2=pro(b,d);
p3=pro(a+b,c+d);
p=(pow(10,dig)*p1)+(pow(10,dig/2)*(p3-p2-p1))+p2;}
if(dig==1)
return (x*y);
}
int digits(int o)
{ int c=0;
while(o>0){
o=o/10;
c++;
}
return c;
}
答案 0 :(得分:2)
int d;
未在函数pro()
中初始化并且您正在使用它,使用未确定的值导致未定义的behvaior。
请在使用前将变量初始化为合适的值。
仅供参考pow()
的原型
double pow(double x, double y)
但我没有看到正在使用double并且你将int传递给这个API并将返回值存储在int中,因此由于类型不匹配而可能无法获得预期的结果
答案 1 :(得分:2)
int pro(int x,int y)
{
...
if(dig==1)
return (x*y);
}
如果dig
不是1,则返回堆栈中的任何值。
我建议你用gcc和warn-all compiler-flag(-Wall
)编译。