7-3 舍入 (20 分)【PAT（乙级）2020年冬季考试】分析：
分析个锤子！这题就够离谱的，下意思觉得不难，但是真的巨复杂。

代码（13分）：
#include <iostream> #include <cstring> #include <cstdio> #include <map> using namespace std; int main(){ int n,d,t; cin>>n>>d; char a[205]; while(n--){ scanf("%d ",&t); cin.getline(a,205); int low=0; if(a[0]=='-'||a[0]=='+'){ char m=a[0]; low++; } int len=strlen(a),dot; for(int i=low;i<len;i++){ if(a[i]=='.'){ dot=i; break; } } for(int i=len;i<=dot+d+1;i++) a[i]='0'; if(t==1){ int add,temp; if(a[dot+d+1]>='5'){ add=1; for(int i=dot+d;i>dot;i--){ temp=a[i]-'0'+add; a[i]=temp%10+'0'; add=temp/10; } if(add){ for(int i=dot-1;i>=low;i--){ temp=a[i]-'0'+add; a[i]=temp%10+'0'; add=temp/10; } if(add) cout<<1; } } for(int i=low;i<=dot+d;i++){ cout<<a[i]; } } else if(t==2){ for(int i=low;i<=dot+d;i++){ cout<<a[i]; } } else if(t==3){ int add,temp; if(a[dot+d+1]<='4'||a[dot+d+1]=='5'&&a[dot+d+2]=='0'&&(a[dot+d]-'0')%2==0){ for(int i=low;i<=dot+d;i++){ cout<<a[i]; } } else if(a[dot+d+1]>='6'||a[dot+d+1]=='5'&&a[dot+d+2]!='0'||a[dot+d+1]=='5'&&a[dot+d+2]=='0'&&(a[dot+d]-'0')%2==1){ add=1; for(int i=dot+d;i>dot;i--){ temp=a[i]-'0'+add; a[i]=temp%10+'0'; add=temp/10; } if(add){ for(int i=dot-1;i>=low;i--){ temp=a[i]-'0'+add; a[i]=temp%10+'0'; add=temp/10; } if(add) cout<<1; } for(int i=low;i<=dot+d;i++) cout<<a[i]; } } // for(int i=0;i<=dot+d;i++){ // cout<<a[i]; // } if(n>0) cout<<endl; } return 0; }