注意点:用double会出错,精度问题。 因为只会出现正数或者n.5,所以,用__int64处理。 #include<iostream> #include<cstdio> #include<cstring> using namespace std; double dir[][2]={{0,0},{-1,1},{0,1},{1,1},{-1,0},{0,0},{1,0},{-1,-1},{0,-1},{1,-1}}; class point { public: double x,y; }; point s,next,last; int cnt; char ch; int main() { int t,i; cin>>t; while(t--) { s.x =0;s.y=0; last=s; double ans=0; cin>>ch; while(ch!='5') { int k=ch-'0'; next.x =last.x +dir[k][0]; next.y =last.y +dir[k][1]; ans+=last.x *next.y -last.y*next.x ; last=next; cin>>ch; } ans+=s.x *last.y-s.y*last.x ; if(ans<0) ans*=-1; printf("%lf/n",ans/2); } return 0; }