E - Chinese Girls' Amusement (高精度&數論)

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章