/*
高精度乘法(大整数乘法)
*/
#include <stdio.h>
#include <math.h>
int sum[1024],n;
char num[8];
int main()
{
while(~scanf("%s%d",num,&n))
{
int r=0,m=1,t=0,k=0;
sum[0]=1;
for(int i=5,j=0;i>=0;i--)/*因为r最大只有6位数,转换成整数计算比较快
(当同时要计算出结果的小数点的位置)*/
{
if(num[i]=='.')
t=(5-i)*n;//计算出结果的小数点的位置
else
r+=(num[i]-'0')*pow(10.0,j++);//转换成整数
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
sum[j]*=r;
for(int j=0;j<m;j++)
if(sum[j]>9)
{
if(j==m-1)
sum[m++]=0;
sum[j+1]+=sum[j]/10;
sum[j]%=10;//因为r为五或六位数,所以使用模运算
}
}
if(t)
{
for(int i=0;i<t;i++)/*清除小数点后(i从0到t)的0,
t之后的0为整数部分,不可删除*/
{
if(sum[i]==0)
k++;
else
break;
}
}
if(t>=m)//如果小数点的位置大于结果的位数,先输出小数点,再输出补偿0
{
printf(".");
for(int i=m;i<t;i++)
printf("0");
}
for(int i=m-1;i>=k;i--)
{
printf("%d",sum[i]);
if(i==t&&i!=k)//输出不是存在于末尾的小数点
printf(".");
}
printf("\n");
}
return 0;
}
/*
数据:
95.123 12
0.4321 20
5.1234 15
6.7592 9
98.999 10
1.0000 12
100000 1
0.0001 2
100.00 2
000000 2
*/
POJ1001 Exponentiation
最新推荐文章于 2019-07-02 10:26:52 发布