解题思路:一开始只是超时,然后又是结果错误,感觉应该是大数的时候出了问题,对比了一下自己和他人的解法,发现自己并没有用一些比较高级的函数库。

我自我觉得应该注意的一个问题就是怎么防止死循环,所以你在看我的代码的时候其实是不完美的,可以用抽屉原理保证一旦循环次数超过10的k次方还没有得出结果,那他一定没有循环次数,就应该输出-1.


注意事项:如果哪位大佬能看出错误,请赐教

参考代码:

 #include<stdio.h>
 #include<math.h>
 int main()
 {
  int n,k,i;
  
  scanf("%d %d",&n,&k);
  int X=0,N,M=n;
  int c=(int)pow(10,k);
  N=n%c;

//求n的k次方的k位尾数
  for(i=2;N!=(X)&&(i<=c+5);i++)//此处不完美,但是保险一点把吧
  {
   M=n*M;//代替了pow(n,i)
   X=M%c;
   
  }

 if(N==X)
 {
   printf("%d",i-2);
 }
 else printf("-1");
  return 0;
  
  }
 
 
 


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 2 条评论

酷酷流浪猫 5年前 回复TA
想法没问题,应该是大数溢出(10的100次方比2的32次方大),建议使用数组a[k+1]代替,自己编写乘法函数,进位检查函数
莫尘 5年前 回复TA
那个大数,巨大无比的数,真的烦人。