zoukankan      html  css  js  c++  java
  • Poj.Grids 2951 浮点数求高精度幂

    总时间限制:
    1000ms
    内存限制:
    65536kB
    描述
    有一个实数 R ( 0.0 < R < 99.999 ) ,要求写程序精确计算 R 的 n 次方。n 是整数并且 0 < n <= 25。
    输入
    T输入包括多组 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
    
     1 //@author langx
     2 //G++4.4
     3 #include <cstdio>
     4 #include <cstring>
     5 #define SIZE 126
     6 #define LEN 5
     7 
     8 int a[SIZE],b[LEN];
     9 
    10 int mul( int alen,int blen){
    11     int tmp[SIZE], i, j, k;
    12     memset(tmp,0,sizeof(tmp));
    13     for( i = 0; i < alen; ++i){
    14         for( j = 0; j < blen; ++j){
    15             tmp[i + j] += a[i] * b[j];
    16         }   
    17     }
    18     k = alen + blen - 1;
    19     for( i = 0;i < k; ++i){
    20         if( tmp[i] >= 10){
    21             tmp[ i + 1] += tmp[i] / 10;
    22             tmp[i] = tmp[i] % 10;
    23         }
    24         a[i] = tmp[i];
    25     }
    26     a[i] = tmp[i];
    27     if( tmp[k] !=0 )k++;
    28     return k;
    29 }
    30 
    31 int main(){
    32     char r[LEN + 1];
    33     int n, i, j, len, alen, mark, formark, ok;
    34     while( scanf("%s%d",r, &n) == 2 ){
    35         len = strlen(r);
    36         mark = 0;
    37         for( i = len - 1, j = 0 ; i >= 0 ; --i){
    38             if(r[i]=='.'){
    39                 mark =i;continue; //记录小数点位置
    40             }
    41             a[j] = b[j++] = r[i]-'0';
    42         }
    43         --len;
    44         mark = len - mark;
    45         alen = len;
    46         for( i = 1;i < n; i++){
    47             alen = mul( alen,len);
    48         }
    49         for( i = 0; i < alen; ++i){
    50             if( a[i] != 0)break;
    51         }
    52         mark *= n;
    53         formark = i; //记录后缀,如70.10000
    54         ok = 0;
    55         for( i = alen-1; i >= formark; --i){
    56             if( a[i] == 0 && i >= mark && !ok )continue;
    57             if( i == mark - 1) printf(".");
    58             printf("%d", a[i]);
    59             ok = 1;
    60         }
    61         for(formark--; formark >= mark; --formark){
    62             printf("0");
    63         }
    64         printf("
    ");
    65     }
    66     return 0;
    67 }
     

     
  • 相关阅读:
    下载安装Apacheweb
    灵魂拷问第4篇:说一说从输入URL到页面呈现发生了什么?——解析算法篇
    灵魂拷问第3篇:说一说从输入URL到页面呈现发生了什么?——网络篇
    灵魂拷问第2篇:能不能说一说浏览器的本地存储?各自优劣如何?
    灵魂拷问第1篇:能不能说一说浏览器缓存?
    为什么是三次握手和四次挥手?
    http协商缓存VS强缓存
    版本管理之Git神器
    JavaScript 运行原理
    「动画演示」:变量提升别有一翻风味
  • 原文地址:https://www.cnblogs.com/vivider/p/3716376.html
Copyright © 2011-2022 走看看