【百炼oj】1001:Exponentiation

原创 2018年04月15日 09:09:52

描述

Problems involving the computation of exact values of very large magnitude and precision are common. For example, the computation of the national debt is a taxing experience for many computer systems. 

This problem requires that you write a program to compute the exact value of Rnwhere R is a real number ( 0.0 < R < 99.999 ) and n is an integer such that 0 < n <= 25.

输入The input will consist of a set of pairs of values for R and n. The R value will occupy columns 1 through 6, and the n value will be in columns 8 and 9.输出The output will consist of one line for each line of input giving the exact value of R^n. Leading zeros should be suppressed in the output. Insignificant trailing zeros must not be printed. Don't print the decimal point if the result is an integer.样例输入
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


#include<stdio.h>
#include<string.h>
#include<math.h>
#define p 7
#define len 120
int main(){
    int mult(int*a,int*b);
    int n,i,j,k,location,flag;
    int an[len],bn[len];
    char sz[p];
    while(scanf("%s %d",sz,&n)==2){
            memset(an,0,sizeof(an));
            memset(bn,0,sizeof(bn));
            an[0]=1;
            location=-1;
        for(i=0;i<p-1;i++){
            if(sz[i]=='.'){
                location=i;//memory the location of the dot
                location=n*(p-2-i);//get the new location
                for(j=i;j<p-1;j++)
                    sz[j]=sz[j+1];//remove the dot
                    sz[p-1]='\0';
            }
        }
        for(i=0;i<strlen(sz);i++)
            bn[i]=sz[strlen(sz)-1-i]-'0';
             for(i=0;i<n;i++)
            mult(an,bn);
        if(location==-1){
        flag=0;
        for(i=len-1;i>=0;i--){
            if(flag)printf("%d",an[i]);
        else if(an[i]){
            printf("%d",an[i]);
            flag=1;
            }
        }
         if(!flag)printf("0");
         printf("\n");
        }//整数情况
        else//小数
        {
            for(i=0;;i++){
                 k=i;
                if(an[i]!=0)break;
            }
           for(i=len-1;i>=k;i--){
               if(an[i])break;
           }
           if(i<location){
            printf(".");
            for(i=location-1;i>=k;i--)printf("%d",an[i]);
            printf("\n");
           }
           else{
                if(k<location){
            flag=0;
            for(i=len-1;i>=k;i--){
            if(flag){
                    printf("%d",an[i]);
                    if(i==location&&i!=k)printf(".");
            }
            else if(an[i]){
            printf("%d",an[i]);
            if(i==location&&i!=k)printf(".");
            flag=1;
            }
        }
                    printf("\n");
           }
           else{
            flag=0;
            for(i=len-1;i>=location;i--){
            if(flag){
                    printf("%d",an[i]);
            }
            else if(an[i]){
            printf("%d",an[i]);
            flag=1;
            }
        }
          if(!flag)printf("0");
          printf("\n");
           }
           }
        }
    }
}
int mult(int*a,int*b){
    int i,j,k,l;
    int c[len];
    memset(c,0,sizeof(c));
    for(i=0;i<len;i++){
        k=0;
        for(j=0;j<len-i;j++){
            l=c[i+j]+a[j]*b[i]+k;
            c[i+j]=l%10;
            k=l/10;
        }
    }
    for(i=0;i<len;i++)a[i]=c[i];
}

POJ 百练1001 提示与参考

POJ不提供后台的测试数据,但是这道题的测试数据很可能包含: 10.0 0.0 1.1 0.1 ... 这类数据。 实现的方法: 1、先实现长整数的乘法(不细说) 2、在实现在结果中添加小数点:分...
  • jt492177512
  • jt492177512
  • 2016-07-03 04:11:12
  • 186

OJ百练1001

#include #include #include using namespace std; string strMultiplies(const string& str1, const s...
  • a363344923
  • a363344923
  • 2014-12-07 15:42:53
  • 747

北大百炼1003 Hangover 题解

1003:Hangover 总时间限制: 1000ms 内存限制: 65536kB 描述 How far can you make a stack of card...
  • yuxuedashen
  • yuxuedashen
  • 2015-06-25 19:57:29
  • 244

北大OJ 1001题 Exponentiation

北大OJ 1001题 Exponentiation
  • wolinxuebin
  • wolinxuebin
  • 2013-10-25 20:19:54
  • 2579

北大OJ 1001题

题目:输入一序列的正实数和幂次(正整数)对,然后打印结果(具体的比这个精细) 这道题是关于大数计算的(大数求幂),从开始建立思路,到写代码、调式到最后被AC以及最终的优化,总共用了差不多一天的时...
  • chiichen
  • chiichen
  • 2011-08-14 13:32:44
  • 3617

百炼OJ1005

描述 Fred Mapper is considering purchasing some land in Louisiana to build his house on. In the proce...
  • u014079441
  • u014079441
  • 2016-01-15 14:34:30
  • 241

百炼OJ:2801:填词

Alex喜欢填词游戏。填词是游戏是一个非常简单的游戏。填词游戏包括一个N * M大小的矩形方格盘和P个单词。玩家需要把每个方格中填上一个字母使得每个单词都能在方格盘上找到...
  • Kangyucheng
  • Kangyucheng
  • 2017-07-18 21:30:17
  • 221

百炼OJ1007

描述 现在有一些长度相等的DNA串(只由ACGT四个字母组成),请将它们按照逆序对的数量多少排序。 逆序对指的是字符串A中的两个字符A[i]、A[j],具有i A[j] 的性质。如字符串”ATC...
  • u014079441
  • u014079441
  • 2016-01-15 14:50:34
  • 585

【北大OJ第二题】Exponentiation(C++)

#include "stdafx.h" #include #include #include #include #include #include using namespace std...
  • XIAXIA__
  • XIAXIA__
  • 2014-11-07 15:43:25
  • 1243

POJ 百炼 保研机试 2750:鸡兔同笼

2750:鸡兔同笼 查看提交统计提示提问 总时间限制: 1000ms 内存限制: 65536kB 描述一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外...
  • u013240812
  • u013240812
  • 2015-11-10 14:52:12
  • 513
收藏助手
不良信息举报
您举报文章:【百炼oj】1001:Exponentiation
举报原因:
原因补充:

(最多只允许输入30个字)