L1-046 整除光棍

开long long循环解题,只拿了15分
再次读题,题目的答案是光棍数 / x = s
我们思考下除法的本质,是不是会发现答案的每一位都是每除一次的商
然后剩下的余数*10加上后面一位,也就是说除法实际上只和两位数有关
前面被算过了就可以不考虑了,而光棍数我们知道全是1
所以后面我们只要补1就行,这样用int就能存下
那这样我们先找到比x大的第一个光棍数,然后每次除以x
输出商,再把剩下的余数*10+1,不断循环
直到余数为0,表示整除完了

定义第一个数为1,循环找到比x大且最小的光棍数

之后每除一次输出一位,如果有余数就先乘10再加1继续除

注意我们还要得到1的个数,所以我们定义一个count=1(最后一个数字会跳出,无法让count++,所以我们直接定义count=1,而不是count=0),在我们求每一个数字的时候都要让count++。

下面这个也可以看看,很有想法

L1-046. 整除光棍 - 万进制思想 - 博客园

#include <iostream>
using namespace std;

int main() {
	int x = 0, count = 1, v = 1;

	cin >> x;
	
	while (v < x) {
		v = v * 10 + 1;
		count++;
	}
	
	while (1) {
		cout << v / x;
		if (v % x == 0)	break;
		else {
			v = v % x * 10 + 1;
			count++;
		}
	}
	
	cout << " " << count;
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值