【2016.10.7NOIP普及模拟】幂运算

发布于 2019-04-13  7 次阅读


题目描述

星期五下午,放学的下课铃声响了,周末到了,同学们非常高兴。但今天小Y高兴不起来,因为老师布置了一道比较烦的幂运算题。
一般情况下,计算机所能够处理的小数的范围和精度都是非常有限的。小Y的老师给出了一个小数a和指数b,让小Y求ab。小Y觉得手算非常麻烦,于是很不高兴,希望你能编程帮助他计算。

输入

输入文件exp.in仅包含两行。
第一行是a。
第二行是b。
a>0,a的长度不超过10位(不包括小数点),保证这个数是X.Y的形式,其中X一定存在,但Y可能没有(此时小数点也不会有)。a可能有多余的前导零或尾零。
1 <= b <= 25,且为整数。

输出

输出文件exp.out仅包含一行,即ab的结果。
整数部分前面有0必须去掉,小数部分末尾有0也必须去掉。例如000.10100需要变为.101(整数部分为0也去掉)。如果结果是整数则直接输出整数形式即可。

思路

普通的高精度乘法

const
  maxn=1000;
var
  a:array[1..maxn] of int64;
  i,j,k,n,m,l,p:longint;
  st:string;

procedure init;
begin
  readln(st);
  readln(m);
  l:=length(st);
  while st[l]='0' do
    dec(l);
  delete(st,l+1,length(st)-l);
  for i:=1 to l do
    if st[i]='.'
      then begin
             p:=l-i;
             dec(l);
             delete(st,i,1);
             break
           end;
  j:=1;
  while (st[j]='0') and (j
]]>