poj 1001 Exponentiation
1001 Exponentiation
求R^n,R是一个实数,(0.0<R<99.999),n是一个整数,0<n<=25.
输入格式:R会占据第1到6列,n会占据第8到9列。
样例:
input:
95.123 12
0.4321 20
5.1234 15
6.7592 9
98.999 10
1.0100 12
output:
548815620517731830194541.899025343415715973535967221869852721
.00000005148554641076956121994511276767154838481760200726351203835429763013462401
43992025569.928573701266488041146654993318703707511666295476720493953024
29448126.764121021618164430206909037173276672
90429072743629540498.107596019456651774561044010001
1.126825030131969720661201
思路:
1.把R处理成一个整数,剔除小数点,并且记录小数点后面位数k。
2.把整数转化为BigInt,进行n-1次乘法,k×=n。
3.处理输出。
1.
利用stringstream把处理后的字符串R转化为int
2.
略
3.
这里是一个比较重点的部分,经常会出错。
对于小数点后面的部分,最末尾的0是都要舍去的,小数点前面如果仅仅有一个0,也是需要舍去的。
我的处理方法是,对最后得到的BigInt,先转化为一个字符串,然后:
如果它=“0”,那么直接输出。
如果它的末尾==0 并且 k!=0 那么不断截去末尾,并且k--
完毕后,如果k=0,那么直接输出字符串
如果字符串本来为0,那么很可能完成后字符串消失,所以需要对纯粹0的字符串进行特判。
如果k!=0
k比字符串的长度大,那么堆字符串前补0,之后输出“.”+字符串
k比字符串的长度小,那么在合适的位置插入小数点。