//使用int记录小数点的位置,使用string记录去掉小数点和尾零后的整数,例:
//95.123 记作 -3 与 "95123"
//1.0100 记作 -2 与 "101"
//110000 记作 4 与 "11"
#include<iostream>
#include<string>
using namespace std;
//输入数据的处理
void pre_treat(string &str, int &dot){
if ((dot = str.find('.')) == string::npos) dot = 0;
else{ str.erase(dot, 1); dot -= str.length(); }
for (string::reverse_iterator r_it = str.rbegin();
*r_it == '0'; str.erase((++r_it).base())) ++dot;
for (string::iterator it = str.begin(); *it == '0'; str.erase(it));
}
//输出数据处理
string& last_treat(string &result, int r_dot){
string temp;
if (r_dot >= 0)
result.append(r_dot, '0');
else if (-r_dot <= result.length())
result.insert(r_dot + result.length(), ".");
else
result = '.' + string(-r_dot - result.length(), '0') + result;
return result;
}
//字符串整数的加法
string addition(const string &a,const string &b){
int pa = a.length(), pb = b.length();
int pc = pa > pb ? pa : pb;
string c(pc, '0');
int carry = 0, sum;
for (--pa, --pb, --pc; pa >= 0 && pb >= 0; --pa, --pb, --pc){
sum = a[pa] - '0' + b[pb] - '0' + carry;
c[pc] += sum % 10; carry = sum / 10;
}
for (; pa >= 0; --pa, --pc){
sum = a[pa] - '0' + carry;
c[pc] += sum % 10; carry = sum / 10;
}
for (; pb >= 0; --pb, --pc){
sum = b[pb] - '0' + carry;
c[pc] += sum % 10; carry = sum / 10;
}
if (carry) c = '1' + c;
return c;
}
//字符串整数与字符整数的乘法
string mutiply(const string &a, char c){
int pa = a.length();
int pb = pa + 1;
string b(pb, '0');
int cc = c - '0', carry = 0, sum;
for (--pa, --pb; pa >= 0; --pa, --pb){
sum = (a[pa] - '0')*cc + carry;
b[pb] += sum % 10; carry = sum / 10;
}
if (carry) b[pb] += carry;
else b.erase(string::iterator(b.begin()));
return b;
}
//字符串整数与字符串整数的乘法
string mutiply(const string &a, const string &b){
string c = "0";
for (int pb = b.length() - 1, n = 0; pb >= 0; --pb, n++)
c = addition(c, mutiply(a, b[pb]).append(n, '0'));
return c;
}
int main(){
int exp, dot, r_dot;//指数、输入小数点位置、输出小数点位置
string str, result;
while (cin >> str >> exp){
pre_treat(str, dot);
result = "1"; r_dot = 0;
while (exp--){
result = mutiply(result, str);
r_dot += dot;
}
cout << last_treat(result, r_dot) << endl;
}
return 0;
}
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
static Scanner cin = new Scanner(System.in);
static PrintWriter cout = new PrintWriter(System.out, true);
public static void main(String[] args)
{
BigDecimal a,c;
int b;
while (cin.hasNext())
{
a = cin.nextBigDecimal();
b = cin.nextInt();
c = a.pow(b);
String ans = c.toPlainString();
if (ans.contains(".") == false)
{
cout.println(ans);
}
else
{
int x = 0, y = ans.length() - 1;
while (ans.charAt(x) == '0') x++;
while (ans.charAt(y) == '0') y--;
if (ans.charAt(y) != '.') y++;
cout.println(ans.substring(x, y));
}
}
}
}