delta


私信TA

用户名:derta

访问量:2478

签 名:

何以解忧,唯有 温柔

等  级
排  名 21853
经  验 664
参赛次数 0
文章发表 2
年  龄 19
在职情况 学生
学  校 北雷男子职业技校
专  业 电子相关

  自我简介:

知乎自黑 er

TA的其他文章

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

我自我觉得应该注意的一个问题就是怎么防止死循环,所以你在看我的代码的时候其实是不完美的,可以用抽屉原理保证一旦循环次数超过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分

1 人评分

  评论区

想法没问题,应该是大数溢出(10的100次方比2的32次方大),建议使用数组a[k+1]代替,自己编写乘法函数,进位检查函数
2019-09-14 12:09:50
那个大数,巨大无比的数,真的烦人。
2019-04-14 15:58:50
  • «
  • 1
  • »