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比字符串的长度小,那么在合适的位置插入小数点。

原文地址:https://www.cnblogs.com/dandi/p/3890104.html