小数的幂,就是太麻烦。c++手写高精度。
#include<stdio.h>
#include<string.h>
#include<math.h>
#define MAX 100000
const double eps = 1e-12;
int main()
{
int n, i, j, flag, d, s;
int a[MAX];
double t;
while (scanf("%lf %d", &t, &n) != EOF)
{
int c = 0;
if ((int)t == 0)
flag = 0;
else
flag = 1;
t += eps; //由于double储存特性,0.4321储存会储存为0.4320999999999
while (fabs((int)t - t) > 1e-5)
{
t *= 10;
c ++;
if (c == 5) break;
}
s = (int)t;
memset(a, 0, sizeof(a));
d = 1;
a[0] = 1;
for (i = 0; i < n; i ++)
{
for (j = 0; j < d; j ++)
a[j] = a[j] * s;
for (j = 0; j < d; j ++)
{
if (a[j] > 9)
{
if (j == d - 1)
d ++;
a[j+1] += a[j] / 10;
a[j] = a[j] % 10;
}
}
}
if (d <= c * n && flag == 0)
{
printf(".");
for (j = 0; j < c * n - d; j ++)
printf("0");
for (i = d - 1; i >= 0; i --)
printf("%d", a[i]);
}
else
{
for (i = d - 1; i >= 0; i --)
{
if (i + 1 == c * n)
printf(".");
printf("%d", a[i]);
}
}
printf("\n");
}
return 0;
}
本文介绍了一种使用C++手写的高精度算法来计算小数的幂,通过巧妙地处理浮点数的精度问题,实现精确计算。
&spm=1001.2101.3001.5002&articleId=41015149&d=1&t=3&u=6a32b0871ee544c19b2790cb97afac1b)
1142

被折叠的 条评论
为什么被折叠?



