找数字

题目:
给一个数 nn,让你找出一个只由 0,1 组成的十进制数 m,要求这个正整数 m 可以被 n 整除。

输入格式:
输入一个整数 n (1≤n<200)。
输出格式:
对于输入整数 n的每一个值,输出 m 的相应值,保证有一个数字长度小于 19 位的数字.如果有一个给定值 n 有多个解,其中任何一个都是可以接受的.
本题答案不唯一,符合要求的答案均正确
样例输入
2
样例输出
10

代码如下:

#include<bits/stdc++.h>
using namespace std;
int n;
bool f;
void dfs(long long sum)
{
	if(sum > 1e18) return;
	if(f) return;
	if(sum % n == 0){
		cout << sum << endl;
		f = true;
		return;
	}
	dfs(sum * 10);
	dfs(sum * 10 + 1);
}
int main()
{
	cin >> n;
	dfs(1);
	return 0;	
} 

这里要找你一个数字能被n整除且只能包含1,0这两个数字。基本思路就是先用1尝试,不行每次乘10或乘10 + 1,这里用到可行性剪枝,当找到正确答案后直接输出,然后标记bool变量为true,这样之后就不会进行重复计算了。最后要注意这个数最大不能超1e19。

猜你喜欢

转载自blog.csdn.net/qq_41998938/article/details/87803052