![]() |
1
13
让我把你的问题概括为两个问题: 1)这个程序具体有什么问题? 2)如何找出程序中的问题所在? 其他人已经回答了第一部分,但总而言之: 问题1:数学。POW使用双精度浮点数,精确到小数点后15位。他们不适合做需要解决的问题 很完美 涉及的准确性 大整数 . 如果你尝试用双数计算1000000000000000-1,你会得到1000000000000000,这是对15位小数的精确答案,这就是我们所保证的。如果你需要一个完美准确的答案来处理大量的数据,请使用long来处理少于100亿的结果,或者使用System.Numerics中的大整数数学类,它将随下一版本的框架一起提供。 问题2:有很多更有效的方法可以计算模块化指数,而不需要生成大量的数字;使用它们。 然而,我们这里的情况是“给人一条鱼”。更好的是教你如何钓鱼;学习如何使用调试器调试程序。 如果我必须调试这个程序,我要做的第一件事就是重写它,这样一路上的每一步都存储在一个局部变量中:
现在,在调试器中使用一个示例,其中您知道答案是错误的,并查找违反假设的地方。如果这样做,您很快就会发现1000000立方减去1不是999999999999,而是1000000000000000。 这就是建议1:编写代码,以便在调试器中轻松完成,并检查每个步骤,寻找似乎错误的步骤。 建议2:注意安静的、喋喋不休的疑问。当一些事情看起来不可靠或者有一点你不理解,调查它直到你理解它。 |
![]() |
2
3
维基百科有一篇关于 Modular exponentiation 你会发现信息丰富。iirc,python有内置的。C没有,所以您需要自己实现它。 |
![]() |
3
3
不计算幂模
另外,就效率而言,我注意到您正在进行不必要的计算
具有
|
![]() |
4
0
嗯,有东西不见了,或者是打字错误… “IntHolder1”大概应该是“IntHolder”,对于IntCount2=91,要得到8,增量行应该是:
|
![]() |
5
0
我没有办法解决你的问题,但这里有一条建议:
|
![]() |
danial · 如何在多个字符串的每个位置找到最频繁的字符 2 年前 |
![]() |
Manny · 如何比较Perl中的字符串? 2 年前 |
![]() |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
![]() |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |