#4563: 為何一直溢位= =


allen03262001 (為)

學校 : 不指定學校
編號 : 14457
來源 : [123.194.173.120]
最後登入時間 :
2011-01-31 21:29:28
a006. 一元二次方程式 | From: [123.194.190.178] | 發表日期 : 2010-11-18 00:06

#include<stdio.h>
#include<math.h>
int main()
{
 double a,b,c;
 while(scanf("%lf%lf%lf",&a,&b,&c)==3){
  if(a>0){
   if((b*b-4*a*c)>0){
   printf("Two different roots x1=%f , x2=%f\n",(-b+sqrt(b*b-4*a*c))/(2*a),(-b-sqrt(b*b-4*a*c))/(2*a));}
   if((b*b-4*a*c)==0)
   printf("Two same roots x=%f\n",(-b)/(2*a));
   if((b*b-4*a*c)<0)
    printf("No real root\n");
   }
  if(a<0){
   if((b*b-4*a*c)>0){
   printf("Two different roots x1=%f , x2=%f\n",(-b-sqrt(b*b-4*a*c))/(2*a),(-b+sqrt(b*b-4*a*c))/(2*a));}
   if((b*b-4*a*c)==0)
   printf("Two same roots x=%f\n",(-b)/(2*a));
   if((b*b-4*a*c)<0)
    printf("No real root\n");
   }
  }
  return 0;   
}
  
#4565: Re:為何一直溢位= =


asas (向諸神與地雷醬獻上祈禱)

學校 : 不指定學校
編號 : 5185
來源 : [36.228.104.72]
最後登入時間 :
2024-03-06 23:29:54
a006. 一元二次方程式 | From: [124.218.23.53] | 發表日期 : 2010-11-18 01:58

 不了解你所謂的"溢位".....以下是我幫你修改的~~

 
#include<stdio.h>
#include<math.h>
int main()
{
 double a,b,c;
 while(scanf("%lf%lf%lf",&a,&b,&c)==3){
  if(a>0){
   if((b*b-4*a*c)>0){
   printf("Two different roots x1=%.0lf , x2=%.0lf\n",(-b+sqrt(b*b-4*a*c))/(2*a),(-b-sqrt(b*b-4*a*c))/(2*a));}
   if((b*b-4*a*c)==0)
   printf("Two same roots x=%.0lf\n",(-b)/(2*a));
   if((b*b-4*a*c)<0)
    printf("No real root\n");
   }
  if(a<0){
   if((b*b-4*a*c)>0){
   printf("Two different roots x1=%.0lf , x2=%.0lf\n",(-b-sqrt(b*b-4*a*c))/(2*a),(-b+sqrt(b*b-4*a*c))/(2*a));}
   if((b*b-4*a*c)==0)
   printf("Two same roots x=%.0lf\n",(-b)/(2*a));
   if((b*b-4*a*c)<0)
    printf("No real root\n");
   }
  }
  return 0;   
}
 
 
 
#4568: Re:為何一直溢位= =


allen03262001 (為)

學校 : 不指定學校
編號 : 14457
來源 : [123.194.173.120]
最後登入時間 :
2011-01-31 21:29:28
a006. 一元二次方程式 | From: [140.112.91.122] | 發表日期 : 2010-11-18 19:51

#include<stdio.h>
#include<math.h>
int main()
{
 int a,b,c;
 while(scanf("%d%d%d",&a,&b,&c)==3){
  if(a>0){
   if((b*b-4*a*c)>0)
   printf("Two different roots x1=%d , x2=%d\n",(-b+sqrt(b*b-4*a*c))/(2*a),(-b-sqrt(b*b-4*a*c))/(2*a));
   if((b*b-4*a*c)==0)
   printf("Two same roots x=%d\n",(-b)/(2*a));
   if((b*b-4*a*c)<0)
    printf("No real root\n");
   }
  if(a<0){
   if((b*b-4*a*c)>0)
   printf("Two different roots x1=%d , x2=%d\n",(-b-sqrt(b*b-4*a*c))/(2*a),(-b+sqrt(b*b-4*a*c))/(2*a));
   if((b*b-4*a*c)==0)
   printf("Two same roots x=%d\n",(-b)/(2*a));
   if((b*b-4*a*c)<0)
    printf("No real root\n");
   }
  }
  return 0;   
}
抱歉應該是這個,就是如果輸入1 4 3會出現x1=0,x2=-1074.....

 不知道是為什麼= =

 
#4569: Re:為何一直溢位= =


asas (向諸神與地雷醬獻上祈禱)

學校 : 不指定學校
編號 : 5185
來源 : [36.228.104.72]
最後登入時間 :
2024-03-06 23:29:54
a006. 一元二次方程式 | From: [124.218.23.53] | 發表日期 : 2010-11-18 22:36

只能請更強的高手來解惑~~

目前我只知道是printf或是sqrt的問題....它會變的怪怪的

解決方法就是強制轉型....(其實他的名子我不知道是啥,看看就好)

printf("Two different roots x1=%d , x2=%d\n",(int)(-b+sqrt(b*b-4*a*c))/(2*a),(int)(-b-sqrt(b*b-4*a*c))/(2*a)); 

 
#4591: Re:為何一直溢位= =


allen03262001 (為)

學校 : 不指定學校
編號 : 14457
來源 : [123.194.173.120]
最後登入時間 :
2011-01-31 21:29:28
a006. 一元二次方程式 | From: [123.194.144.177] | 發表日期 : 2010-11-24 01:21

噢~謝謝囉

雖然還不是很清楚

但應該可以慢慢理解=ˇ=

 
ZeroJudge Forum