C/C++ code
/**
* @file 浮点数求高精度幂.cpp
* @author 刘澜涛
* @date 2009-3-07
* @description
* 求一个浮点数的高精度幂
*/
#define LEN 200//定义一个宏
#include<stdio.h>
#include<string.h>
char str1[6]={0};//记录初始浮点数的数组
int num1[6]={0},num2[LEN]={0},num[LEN]={0};//记录转化为数字后的各位数
void mul()
{
    int i,j;
    for(i=0;i<=5;i++)
    {
        for(j=0;j<=LEN-1;j++)
            num[i+j]=num[i+j]+num1[i]*num2[j];//分别计算各位的乘积,并加到对应的位置上
    }
    for(i=0;i<=LEN-1;i++)
    {
        if(num[i]>=10)
        {
            num[i+1]=num[i+1]+num[i]/10;
            num[i]=num[i]%10;//判断各位是否需进位
        }
        num2[i]=num[i];
        num[i]=0;
    }
}
int main()
{printf直接输出数字
    int n,k,i,j,point,place;
    while(scanf("%s%d",str1,&n)==2)
    {
        k=0;
        for(i=5;i>=0;i--)
        {
            if(str1[i]!='.')
            {
                num2[k]=str1[i]-'0';
                num1[k++]=str1[i]-'0';//把各位字符数转化为数字并记录
            }
            else point=i;//记录小数点位数
        }
        for(i=1;i<=n-1;i++)
            mul();//乘n次
        i=LEN-1;
        while(num2[i]==0) i--;
        j=0;
        while(num2[j]==0) j++;//分别到左右边第一个不是零的位置
        place=n*(5-point);//计算小数点位置
        if(place>=i+1)
        {
                printf(".");
            for(k=place-1;k>=j;k--)
                printf("%d",num2[k]);
            printf("\n");
        }//如果小数点位比前面到的两个位置所夹的长度长,则直接输出小数点并补0
        else
        {
            if(j>place-1)
            {
                for(k=i;k>place-1;k--)
                printf("%d",num2[k]);
            }//若为整数则直接输出
            else
            {
                for(k=i;k>=j;k--)
                {
                    if(k==place-1)
                        printf(".");
                    printf("%d",num2[k]);
                }
            }//否则输出过程中在该输出小数点的位置输出小数点
            printf("\n");
        }
        memset(str1,0,sizeof(str1));
        memset(num1,0,sizeof(num1));
        memset(num2,0,sizeof(num2));
        memset(num,0,sizeof(num));//清零
    }
    return 0;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。