//
// main.cpp
// Richard
//
// Created by 邵金杰 on 16/9/6.
// Copyright © 2016年 邵金杰. All rights reserved.
//
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
string operator * (string s,int x)//大数乘一个整数
{
reverse(s.begin(),s.end());
int cmp=0;
for(int i=0;i<s.size();i++)
{
cmp=(s[i]-'0')*x+cmp;
s[i]=(cmp%10+'0');
cmp/=10;
}
while(cmp)
{
s+=(cmp%10+'0');
cmp/=10;
}
reverse(s.begin(),s.end());
return s;
}
string remove_later(string s)//去除后导0
{
bool ok=false;
for(int i=(int)s.size()-1;i>=0;i--)
{
if(s[i]=='0')
s.erase(i);
else if(s[i]=='.'){
s.erase(i);
ok=true;
}
else
ok=true;
if(ok) break;
}
return s;
}
string operator ^ (string s,int n)//浮点数的n次方
{
if(n==0)
return "1";
string count="",cmp="";
int x=0,point=0;
for(int i=0;i<s.size();i++)
{
if(s[i]!='.')
{
cmp+=s[i];
x=x*10+(s[i]-'0');
}
else
point=(int)s.size()-1-i;
}
for(int i=1;i<n;i++)
cmp=cmp*x;
int ans_point=(int)cmp.size()-point*n;
if(ans_point<0)
{
count+='.';
for(int i=ans_point;i!=0;i++)
count+='0';
}
if(ans_point>=0&&ans_point<cmp.size())
cmp.insert(cmp.begin()+ans_point,'.');
count+=remove_later(cmp);
return count;
}
int main()
{
string s;
int n;
while(cin>>s>>n)
{
cout<<(s^n)<<endl;
}
return 0;
}
POJ 1001 Exponentiation(浮点数的n次方)
最新推荐文章于 2021-05-19 03:10:13 发布