#4798: 不用double宣告也可以過關?


lolomonster (lolo)


#include<stdio.h>
#include<math.h>

int main()
{
 int a,b,c;
 int x1,x2,s;
 while(scanf("%d%d%d",&a,&b,&c)!=EOF)
 {
s=sqrt(b*b-4*a*c);
x1=(-b+s)/2/a;
x2=(-b-s)/2/a;
if(b*b-4*a*c<0){printf("No real root\n");}
else if(x1!=x2){printf("Two different roots x1=%d , x2=%d\n",x1,x2);}
else if(x1==x2){printf("Two same roots x=%d\n",x1);}
 }
 return 0;
}
 
試了一下 結果過關了....
不過int效率比快沒錯 目前2ms
希望有人提供更好的方法?或者我的方法能改進? 
#4803: Re:不用double宣告也可以過關?


cbs951214 (哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈...)


#include
 #include

int main()
{
 int a,b,c;
 int x1,x2,s;
 while(scanf("%d%d%d",&a,&b,&c)!=EOF)
 {
s=sqrt(b*b-4*a*c);
x1=(-b+s)/2/a;
x2=(-b-s)/2/a;
if(b*b-4*a*c<0){printf("No real root\n");}
else if(x1!=x2){printf("Two different roots x1=%d , x2=%d\n",x1,x2);}
else if(x1==x2){printf("Two same roots x=%d\n",x1);}
 }
 return 0;
}
 
試了一下 結果過關了....
不過int效率比快沒錯 目前2ms
希望有人提供更好的方法?或者我的方法能改進? 


PS: 答案均為整數,若有兩個根則大者在前

請看清楚題目