如何编程对数值很大、精度很高的数进行计算?

来源:百度知道 编辑:UC知道 时间:2024/05/17 02:56:34
<如有必要,请插入C语言代码>
对一个实数R(0.0<R<99.999),要求写程序精确计算R的n次方(Rn),其中n是整数并且0<=n<=30。
Input
输入R和n
Output
对于每次输入,要求输出一行,该行包含精确的R的n次方。输出需要去掉前导0和无用的0。如果输出是整数,不要输出小数点。
Sample Input
95.123 12
1.0100 12
0.4321 20
Sample Output
548815620517731830194541.899025343415715973535967221869852721
1.126825030131969720661201
.00000005148554641076956121994511276767154838481760200726351203835429763013462401

不一定非要代码,但是希望给出多种算法
回答精彩我会追加分数(20-100)
谢谢各位高手!!

可以用一种数据结构来存储这样的大数字,一般会使用栈,数组等,然后再定义他们的计算就可以了!

我提供一种算法:
先将数R扩大10的m次方倍,使之恰好为整数,然后参照以下算法的计算方法(计算5的2003次方)
#include<stdio.h>
#include<string.h>

void main()
{
char ret[2003];
int i, j, temp,
crray = 0;/*进位*/

/*ret初始化*/
memset( ret, '\0', sizeof(char) * 2003 );

/*乘5,做2003次*/
for( i = 1; i <= 2003; i++ )
{
if( i == 1 )
{
/*首次的字符串的赋值*/
ret[0] = '5';
}
else
{
for( j = 0; ; j++ )
{
/*如果有进位,但是该位为空则把该位置成字符0*/
ret[j] = ret[j] == '\0' ? '0' : ret[j];

/*乘5的操作*/
temp = ( ret[j] - '0' ) * 5;
ret[j] = ( ( temp % 10 ) + crray ) + '0';
/*记录进位*/
crray = temp / 10;

if( ret[j + 1] == '\0'