您的位置:首页 > 其它

南邮 OJ 1016 求幂

2015-08-03 10:17 218 查看


求幂

时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 603            测试通过 : 146 

比赛描述

求R的n次幂(0.0<r<99.999,0<n<=25)

输入

每行输入两个数R和n

R值占1-6列,n占8-9列

输出

对应于每一行输入,输出R的n次幂

前导的0不要输出
无意义的0不要输出
如果结果是一个整数,不要输出小数点
最后一行是空行

样例输入

95.123 12

0.4321 20

5.1234 15

6.7592  9

98.999 10

1.0100 12

样例输出

548815620517731830194541.899025343415715973535967221869852721

.00000005148554641076956121994511276767154838481760200726351203835429763013462401

43992025569.928573701266488041146654993318703707511666295476720493953024

29448126.764121021618164430206909037173276672

90429072743629540498.107596019456651774561044010001

1.126825030131969720661201

题目来源

POJ

#include<iostream>
using namespace std;
#define LEN 130								//LEN:最终结果有LEN位
#define len1 6								//存放浮点数的数组有len1位
#include<string>
int main()
{
string str;								//str:接收到的数字,按照字符串存储
int n;									//n:幂
while(cin>>str>>n)
{
int i,j,k,L;
int a[len1],r[LEN];					//a[]接收到的数据,r[]将要输出的数据
for(i=0;i<len1;i++)					//两个数组清零
a[i]=0;
for(i=0;i<LEN;i++)
r[i]=0;
j=0;
for(i=str.size()-1;i>=0;i--)		//这里讲字符串倒顺序、转化为数字,即a[]、r[]高表表存放的数字的高位
{
if(str[i]=='.'){k=i;continue;}	//k:小数点的下标
else
{
a[j]=(int)(str[i]-'0');		//去除小数点之后的数字,相当于扩大了10^(str.size()-(k+1))倍
r[j]=(int)(str[i]-'0');
j++;
}
}
L=n*(str.size()-(k+1));				//L:最终结果扩大了10^L倍
for(i=1;i<n;i++)					//执行了n-1次
{
int c[LEN*2];					//暂时存放每次相乘一次的结果,防止精度丢失,用了双倍长度的数组
for(j=0;j<LEN*2;j++)
c[j]=0;
for(k=0;k<len1;k++)				//每一位单独相乘
{
for(j=0;j<LEN;j++)
c[k+j]+=r[j]*a[k];		//这里a[]是去掉小数点之后的数字
}
for(k=0;k<LEN*2;k++)			//将进为放在更高位,余数方位本位
{
if(c[k]>=10)
{
c[k+1]+=c[k]/10;
c[k]%=10;
}
}
for(k=0;k<LEN;k++)				//将每次相乘的结果放回r[]
r[k]=c[k];
}

for(i=LEN-1;i>=L;i--)				//最高位的零不输出
{
if(r[i]!=0)
break;
}
for(j=i;j>=L;j--)					//输出正数部分
cout<<r[j];
for(i=0;i<L;i++)					//小数点右边无意义的0不输出
{
if(r[i]!=0)break;
}
if(i<L)								//如果有消暑部分的话输出小数点
cout<<'.';
for(i=0;i<L;i++)					//输出小树部分
{
if(r[i]!=0)break;
}
for(j=L-1;j>=i;j--)

cout<<r[j];
cout<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  南邮OJ ACM 求幂