| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:pick 定理+边上的顶点数 恩 学习了 ,不过为什么代码C++能过G++过不了?大牛们能帮我看下吗In Reply To:pick 定理+边上的顶点数 恩 学习了 ,不过为什么代码C++能过G++过不了?大牛们能帮我看下吗 Posted by:abilitytao at 2009-08-10 22:45:07 > #include<iostream>
> #include<cmath>
> #include<cstdio>
> using namespace std;
>
> struct point{double x,y;};
>
> int EXTENDED_EUCLID(int a,int b,int &x,int &y)//扩展欧几里德算法
> {
> if(b==0)
> {
> x=1;
> y=0;
> return a;
> }
> int r=EXTENDED_EUCLID(b,a%b,x,y);
> int temp=x;
> x=y;
> y=temp-a/b*y;
> return r;
> }
>
> //计算多边形面积,顶点按顺时针或逆时针给出
> double area_polygon(int n,point* p){
> double s1=0,s2=0;
> int i;
> for (i=0;i<n;i++)
> s1+=p[(i+1)%n].y*p[i].x,s2+=p[(i+1)%n].y*p[(i+2)%n].x;
> return fabs(s1-s2)/2;
> }
> point p[103];
> int main()
> {
> int testcase;
> int n;
> int i,j;
> double I,E,s;
> int x,y;
>
> scanf("%d",&testcase);
> for(i=1;i<=testcase;i++)
> {
> E=0;
>
> scanf("%d",&n);
> point temp;
> temp.x=temp.y=0;
> p[0]=temp;
> double dx,dy;
> for(j=1;j<=n;j++)
> {
>
> scanf("%lf%lf",&dx,&dy);
> temp.x+=dx;
> temp.y+=dy;
> p[j]=temp;
> }
> s=area_polygon(n,p);
> for(j=1;j<n;j++)
> {
>
> E+=EXTENDED_EUCLID((int)(abs(p[j].x-p[j-1].x)+0.1),(int)(abs(p[j].y-p[j-1].y)+0.1),x,y);
> }
> E+=EXTENDED_EUCLID((int)(abs(p[n-1].x-p[0].x)+0.1),(int)(abs(p[n-1].y-p[0].y)+0.1),x,y);
>
> I=s+1-E/2;
> printf("Scenario #%d:\n",i);
> printf("%.0lf %.0lf %.1lf\n\n",I,E,s);
>
>
>
> }
> return 0;
>
>
> }
问题应该在printf("%lf")这里,因为printf里面没有%lf这种写法,但是某些编译器能通过这个。这是C语言基本常识问题。
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator