标签:
Time Limit:500ms Memory Limit:10000K
Description
Input
Output
Sample Input
Sample Input
95.123 12 0.4321 20 5.1234 15 6.7592 9 98.999 10 1.0100 12
Sample Output
548815620517731830194541.899025343415715973535967221869852721 .00000005148554641076956121994511276767154838481760200726351203835429763013462401 43992025569.928573701266488041146654993318703707511666295476720493953024 29448126.764121021618164430206909037173276672 90429072743629540498.107596019456651774561044010001 1.126825030131969720661201
在计算机上进行高精度计算,首先要处理好以下几个基本问题:
运算因子超出了整型、实型能表示的范围,肯定不能直接用一个数的形式来表示。能表示多个数的数据类型有两种:数组和字符串。
还有就是:输出时对非最高位的补零处理。
#include<iostream>
using namespace std;
#define max 200
int main()
{
int a[max]={0},n,e,j,k,q,set=0;//base的n次方
char c[20];//接收输入字符串
while(cin>>c>>n)
{
int len=strlen(c),base=0,i,record=0;
for(i=0;i<len;i++)
{
if(c[i]==‘.‘)
{
record=len-i-1;//record为小数的位数
continue;
}
base=base*10+c[i]-‘0‘;
}
if(record)
{
for(k=len-1;c[k]==‘0‘;k--,record--)
base/=10;//去掉后面多余的0;
}
record*=n;//record为总的小数位
for(q=base,i=0;i<max;i++,q/=10)
{
a[i]=q%10;//把base复制到数组a
}
for(j=0;j<n-1;j++)
{
for(i=0;i<max;i++)
{
a[i]=a[i]*base+set;
set=a[i]/10;
a[i]=a[i]%10;
}
}//计算,结果保存在数组a中
for(i=max-1;i>=0;i--)//i是首个不为0的
if(a[i]!=0) break;
if(record>i)//无整数部分
{
cout<<".";
for(e=record-1;e>=0;e--)
{
cout<<a[e];
}
}
else //有整数部分
{
for(;i>record-1;i--)
{
cout<<a[i];
}
if(i>=0)
cout<<".";
for(;i>=0;i--)
cout<<a[i];
}
cout<<endl;
}
return 0;
}
标签:
原文地址:http://blog.csdn.net/songzitea/article/details/51340106