jzoj3058-火炬手【高精度,暴力】

正题


题目大意

对于一个 n n n,求一个 m m m,使得 n ∗ m n*m nm只有0或1


解题思路

暴力枚举 n ∗ m n*m nm,然后高精度求答案。


c o d e code code

#include
#include
#define ll long long
using namespace std;
ll n,xans;
int a[151],ans[151];
void add(){
	a[1]++;
	for(int i=1;i<=150;i++){
		if(a[i]>1)
		  a[i]=0,a[i+1]++;
	}
}//下一个
bool div(int x){
	int gs=0,s;
	for(int i=150;i>=1;i--){
		s=gs*10+a[i];
		ans[i]=s/x;
		gs=s%x;
	}
	return !gs;
}//高精除
void write(){
	int w=150;
	while(!ans[w]) w--;
	while(w)
	  printf("%d",ans[w--]);
}//输出
int main()
{
	scanf("%lld",&n);
	while(true){
		add();
		if(div(n)){
			write();
			return 0;
		}
	}
}

你可能感兴趣的:(高精度,优雅的暴力)