经典问题,求多边形面积,用向量叉积可以很好的解决。 #include <iostream> using namespace std; int move[10][2]={{0,0},{-1,-1},{0,-1},{1,-1},{-1,0},{0,0},{1,0},{-1,1},{0,1},{1,1}}; int main() { int n; __int64 ans; int x1,y1,x2,y2; char next; scanf("%d",&n); while(n--) { ans=0; x1=y1=0; while(scanf("%c",&next)&&next!='5') { x2=x1+move[next-'0'][0]; y2=y1+move[next-'0'][1]; ans+=x1*y2-y1*x2; x1=x2; y1=y2; } if(ans<0) ans=-ans; if(ans%2) printf("%.1f/n",((double)ans)/2); else printf("%I64d/n",ans/2); } return 0; }