这道题主要的注意的地方就是叉积有向面积公式使用的熟练度;
还有注意数据类型;
#include<iostream> #include<cstring> #include<cmath> using namespace std; char num[1000100]; int dir[10][2]={0,0,-1,-1,0,-1,1,-1,-1,0,0,0,1,0,-1,1,0,1,1,1}; int corss(int x1,int y1,int x2,int y2){ return x1*y2-x2*y1; } int main(){ //for(int i=1;i<=9;i++) cout<<dir[i][0]<<" "<<dir[i][1]<<endl; int T,len,x1,y1; long long ans; scanf("%d",&T); getchar(); while(T--){ scanf("%s",num); getchar(); len = strlen(num); ans=0; x1 = 0; y1 = 0; for(int i=0;i<len-1;i++){ ans+=corss(x1,y1,x1+dir[num[i]-'0'][0],y1+dir[num[i]-'0'][1]); //cout<<corss(x1,y1,x1+dir[num[i]-'0'][0],y1+dir[num[i]-'0'][1])<<endl;; x1 = x1+dir[num[i]-'0'][0]; y1 = y1+dir[num[i]-'0'][1]; } if(ans<0) ans = -ans; printf(ans%2==0?"%lld ":"%lld.5 ",ans/2); } return 0; }