在比赛中经常可能接触到高精度计算的问题,高精度算法虽然不难,但是写起来总是比直接用麻烦,于是我当时想了各种方法偷懒,想避免这个问题,当时最先想到的就是利用浮点型float 和double的高精度特性来代替高精度算法。具体做法是先用一个double型变量ans来计算并表示结果,然后把结果输出时只显示ans的整数部分。
</pre><p>以上偷懒的方法有时确实能够侥幸成功,但是很多时候却是以失败告终,最后分析一下才发现失败的原因:</p><p>以以下程序为例说明:</p><p></p><p></p><pre name="code" class="cpp">#include <stdio.h>
#include <math.h>
long long ans1;
double ans2;
float ans3;
int main()
{
printf("2^56运算结果:\n");
ans1=pow(2,56);
ans2=pow(2,56);
ans3=pow(2,56);
printf("Integer: %lld\n",ans1);
printf("Double: %.0lf\n",ans2);
printf("Float: %.0f\n",ans3);
printf("\n2^57运算结果:\n");
ans1=pow(2,57);
ans2=pow(2,57);
ans3=pow(2,57);
printf("Integer: %lld\n",ans1);
printf("