C语言调用函数求最大公约数和最小公倍数 无法解析的外部符号 _sacnf,该符号在函数 _main 中被引用

#include<stdio.h>
#include<stdlib.h>
int f1(int a,int b)
{
int n,i;
if(a>=b) n=b;
else n=a;
for(i=n;i<1;++i)
{
if(a%i==0&&b%i==0) return i;
}
}
int f2(int a,int b)
{
int n,i;
if(a>=b) n=a;
else n=b;
for(i=n;;++i)
{
if(i%a==0&&i%b==0) return i;
}
}
int main()
{
int a,b,y_num,b_num;
sacnf("%d",&a);
scanf("%d",&b);
y_num=f1(a,b);
b_num=f2(a,b);
printf("%d %d\n公约=%d\n公倍=%d\n",a,b,y_num,b_num);
system("pause");
}

更好的办法就是用辗转相除法的算法去求最大公约数
int deff(int x, int y) {
int t;
if(x < y) {
t = x;
x = y;
y = t;
}
while(y != 0) {
if(x == y) return x;
else {
int k = x % y;
x = y;
y = k;
}
}
return x;
}来自:求助得到的回答
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-25
sacnf("%d",&a);你把scanf()输入函数写成了sacnf(),你应该在输入a之后会跳出一个内存不能writen的窗口,然后程序中止吧。c语言只要认真一点就不会出太大问题的
第2个回答  2012-12-25
拼错了哦亲
倒数第六行代码
scanf 不是sacnf追问

眼睛真好使,有什么更好的办法求吗?

追答

最大公约数只能试凑,可以从1试到两个数中较小一个的开方
最小公倍数可以用两个数乘积再除以最大公约数得到
另外你f1函数里面的for循环好像不对啊

相似回答