欢迎访问:ACM的题目_美容时尚_生活服务_精致生活网
  • 微信客服微信客服
  • 微信公众号微信公众号

ACM的题目

收藏  分享
网友发布网友发布

ACM的题目

这题思路很简单啊,就是从小到大枚举全由1组成的数,直到找到第一个能被n整除的就是a,输出它的1的个数。

k基本可以认为就是那个全由1组成的数,c就是它包含的1的个数,枚举下一个k的方法就是k=k*10+1;,这能理解吧?因为:

11=1*10+1

111=11*10+1

1111=111*10+1

…………

a要能被n整除,至少a要大于等于n吧?所以第一个循环while(k<n),就是找到第一个大于等于n并且全由1组成的数。

然后如果k不能整除n,也就是while(k%n),就继续枚举咯。但是第二个循环中枚举下一个全由1组成的数用的是k=k%n*10+1;而不是k=k*10+1;,这是因为int存储的整数范围有限,一直k=k*10+1的话很快就会超过int的存储范围,由于k是否能整除n是使用取模操作来判断的,即k%n。

而取模操作有如下数学性质:

(a*b)%p=(a%p*b)%p (a+b)%p=(a%p+b)%p

具体证明过程这里不说了,想知道的话自己查资料。

那么(k%n*10+1)%n==(k*10+1)%n,由于题目中n<1w,k%n<1w,k%n*10+1<10w,所以用k=k%n*10+1能保证k永远在int的范围内,同时k%n==所枚举的那个全由1组成的数%n。

标签: 整除 大于 等于
 
更多>最新的资讯
推荐图文
推荐生活服务
点击排行