E - Chinese Girls’ Amusement (高精度&数论)
思路:
AC代码:
#include<cstdio>
#include<cstring>
using namespace std;
const int N=5e3+5;
int a[N],b[N],l;
char s[N];
void divi(int *a,int f){
int p=0,len=l;
for(int i=len-1;i>=0;i--) //高精减低精.
{
b[i]=(a[i]+p*10)/2;
p=(a[i]+p*10)%2;
}
while(b[len-1]==0) len--;
if(f&&(b[0]&1)) f++; //对偶数讨论 如果不是4m 则减两次1.
for(int i=0;i<f;i++){
int k=0;
while(b[k]==0) b[k]=9,k++;
b[k]--;
}
while(b[len-1]==0) len--;
for(int i=len-1;i>=0;i--) printf("%d",b[i]);
puts("");
}
int main(){
int n;
scanf("%d",&n);
while(n--){
memset(b,0,sizeof b);
scanf("%s",s);
l=strlen(s);
for(int i=0;i<l;i++)
a[l-1-i]=s[i]-'0';
if(a[0]&1) divi(a,0);
else divi(a,1);
if(n) puts("");
}
return 0;
}