网上看到一个问题:已知a,b均为正整数,满足a<b,a2+b2=289,求a,b。
我想用C解决这个问题,并把289改为任意一个从键盘输入的正整数,思路如下:
假设给定的数为a,现将a对半分再开方得到k,那么[1,k]就是较小数(假设为b)的值域。用for循环一个个带入较小数,根据等式求出较大数,若较大数是整数(即取整后大小不变)则输出结果,代码如下:
#include<stdio.h>
#include<math.h>
int main()
{
int a,b,c;
int i,k;
scanf("%d",&a);
k=sqrt(a/2);
for(i==1;i<=k;i++)
{
b=i;
c=sqrt(a-b*b);
if(c==int(c))printf("%d,%d",b,c);
}
getchar() ;
getchar() ;
}
在vscode中运行报错如下:
[Running] cd "e:\学习\编程\C\" && gcc Untitled-1.c -o Untitled-1 && "e:\学习\编程\C\"Untitled-1
Untitled-1.c:3:1: warning: return type defaults to 'int' [-Wimplicit-int]
main()
^~~~
是不是主函数main()的声明语句有问题?应该怎么改以及判断整数是否可以用程序中的if(c==int(c))这个写法?(虽然c定义为int ,但编译器似乎将sqrt的返回结果认定为float,且确实会存储小数点后的信息)