分析:
分析个锤子!这题就够离谱的,下意思觉得不难,但是真的巨复杂。
代码(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;
}