NYOJ 52 无聊的小明

举报
Linux猿 发表于 2021/08/05 00:37:34 2021/08/05
【摘要】 题目链接~~> 做题感悟:这题其实很简单,只是尝试了很久。 解题思路:这题就是取模的思想,一定要注意输出 - 1 的情况,循环必须与第一个次取模得的结果一样,否则如果出现循环不是与第一个产生的循环则输出 - 1 。 代码: #include<stdio.h>#include<string.h>#include<math.h>b...

题目链接~~>

做题感悟:这题其实很简单,只是尝试了很久。

解题思路:这题就是取模的思想,一定要注意输出 - 1 的情况,循环必须与第一个次取模得的结果一样,否则如果出现循环不是与第一个产生的循环则输出 - 1 。

代码:


  
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<math.h>
  4. bool vis[100005] ;
  5. int main()
  6. {
  7. long long int T,n,k,sum ;
  8. scanf("%lld",&T) ;
  9. while(T--)
  10. {
  11. scanf("%lld%lld",&n,&k) ;
  12. memset(vis,false,sizeof(vis)) ;
  13. sum=pow(10,k) ;
  14. long long mx=1,num=1,mod,nx=-1,flag ;
  15. flag=n%sum ;
  16. while(1)
  17. {
  18. mx*=n ;
  19. mod=mx%sum ;
  20. mx=mx%sum ;
  21. if(mod==flag&&vis[mod]) // 如果是与第一个相同则记录
  22. nx=num-1 ;
  23. if(vis[mod]) // 出现循环则结束
  24. break ;
  25. vis[mod]=num ;
  26. num++ ;
  27. }
  28. printf("%lld\n",nx) ;
  29. }
  30. return 0 ;
  31. }


 

文章来源: blog.csdn.net,作者:Linux猿,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/nyist_zxp/article/details/18008511

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。