1001 Exponentiation
2008-10-28 20:01
141 查看
Description
Problemsinvolvingthecomputationofexactvaluesofverylargemagnitudeandprecisionarecommon.Forexample,thecomputationofthenationaldebtisataxingexperienceformanycomputersystems.
ThisproblemrequiresthatyouwriteaprogramtocomputetheexactvalueofRnwhereRisarealnumber(0.0<R<99.999)andnisanintegersuchthat0<n<=25.
Input
TheinputwillconsistofasetofpairsofvaluesforRandn.TheRvaluewilloccupycolumns1through6,andthenvaluewillbeincolumns8and9.
Output
TheoutputwillconsistofonelineforeachlineofinputgivingtheexactvalueofR^n.Leadingzerosshouldbesuppressedintheoutput.Insignificanttrailingzerosmustnotbeprinted.Don'tprintthedecimalpointiftheresultisaninteger.
SampleInput
SampleOutput
Hint
Ifyoudon'tknowhowtodeterminewheatherencountedtheendofinput:
sisastringandnisaninteger
Problemsinvolvingthecomputationofexactvaluesofverylargemagnitudeandprecisionarecommon.Forexample,thecomputationofthenationaldebtisataxingexperienceformanycomputersystems.
ThisproblemrequiresthatyouwriteaprogramtocomputetheexactvalueofRnwhereRisarealnumber(0.0<R<99.999)andnisanintegersuchthat0<n<=25.
Input
TheinputwillconsistofasetofpairsofvaluesforRandn.TheRvaluewilloccupycolumns1through6,andthenvaluewillbeincolumns8and9.
Output
TheoutputwillconsistofonelineforeachlineofinputgivingtheexactvalueofR^n.Leadingzerosshouldbesuppressedintheoutput.Insignificanttrailingzerosmustnotbeprinted.Don'tprintthedecimalpointiftheresultisaninteger.
SampleInput
95.12312 0.432120 5.123415 6.75929 98.99910 1.010012
SampleOutput
548815620517731830194541.899025343415715973535967221869852721 .00000005148554641076956121994511276767154838481760200726351203835429763013462401 43992025569.928573701266488041146654993318703707511666295476720493953024 29448126.764121021618164430206909037173276672 90429072743629540498.107596019456651774561044010001 1.126825030131969720661201
Hint
Ifyoudon'tknowhowtodeterminewheatherencountedtheendofinput:
sisastringandnisaninteger
C++ while(cin>>s>>n) { ... } c while(scanf("%s%d",s,&n)==2)//toseeifthescanfreadinasmanyitemsasyouwant /*while(scanf(%s%d",s,&n)!=EOF)//thisalsowork*/ { ... }
--------------------------------------------------------------------
#include<stdio.h>
#defineMAX200//按照本题的意思,只需用150个就够了
voidpower(int*a,intbase,intn)
{
inti,j,set=0;
memset(a,0,sizeof(int)*MAX);//将a清零
for(i=0,j=base;i<MAX;i++,j=j/10)
a[i]=j%10;
for(i=0;i<n-1;i++)
{
j=0;
for(j=0;j<MAX;j++)
{
set=a[j]*base+set;
a[j]=set%10;
set=set/10;
}}}
intmain(intargc,char**argv)
{
chars[MAX];
inta[MAX];
intn,i,base,len,k=0;
while(scanf("%s%d",s,&n)==2)
{
base=0;
len=strlen(s);
for(i=0;i<len;i++)//一直比较到len,增加了基数的范围
{
if(s[i]=='.')
{
k=len-(i+1);
continue;
}base=base*10+s[i]-'0';
}printf("base:%d/n",base);
if(k!=0)//k==0表示输入的基数没有小数部分,可以正确计算20^2
{
for(i=(len-1);s[i]=='0';i--,k--)
{
base=base/10;
}k=k*n;
}printf("base:%d/n",base);
power(a,base,n);
for(i=MAX-1;i>=0;i--)
{
if(a[i]!=0)
break;
}
//a[0]-a[k-1]为小数部分,所以至少应该从k-1处输出
if(i<=(k-1))//<==>if(k>i)
{
printf(".");
for(i=k-1;i>=0;i--)
printf("%d",a[i]);
}else
{
for(;i>=k;i--)
printf("%d",a[i]);
if(k!=0)
printf(".");
for(;i>=0;i--)
printf("%d",a[i]);
}printf("/n");
}
return0;
}
抄的别人的,但改了一小点。增加了点可用性。
相关文章推荐
- poj 1001 Exponentiation(高精度运算)
- poj 1001 Exponentiation(高精度运算)
- POJ解题报告——1001 Exponentiation
- POJ1001 Exponentiation 高精度
- POJ 1001 Exponentiation G++
- POJ 1001 Exponentiation 大浮点数乘法
- POJ 1001 Exponentiation【高精度用java】
- POJ - 1001 Exponentiation(浮点数高精度乘法)
- POJ 1001 Exponentiation(大数幂,还是Java大发好!需调用多个方法)
- POJ 1001 Exponentiation(大数)
- POJ 1001 Exponentiation 模拟小数幂
- POJ-1001-Exponentiation
- Hdu 1063 & Poj 1001 Exponentiation (java 高精度实数 去除首尾0)
- 1001 . Exponentiation
- poj 1001 Exponentiation
- POJ 1001 Exponentiation (高精度/大数乘法)
- 1001 Exponentiation
- PKU 1001 Exponentiation 枚举
- POJ 1001 Exponentiation
- POJ 1001 Exponentiation