找数字

题目:
给一个数 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。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值