64,654
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include<cstring>
#include <cmath>
#define maxsize 200
using namespace std;
int main()
{
int c[maxsize]={0},a[maxsize]={0};
int g1=0,g2=0,n,i,j,k2=0,k1,g=0,k3=0,r=0,g3=0;
char R[maxsize];
while(cin>>R>>n)
{
k1=strlen(R);
for(i=0;i<k1;i++)
{
if(R[k1-i-1]=='.'){
g++;//;有小数点的标记
k2=i;//小数点位置
}
else a[i-g]=R[k1-i-1]-'0';//将字符串转化为整形数组
}
c[0]=1;
i=0;
while(i<k1-g)
{ r=r+a[i]*(int)pow(10.0,i);i++; }//转化成一个整数
if(r==0)
{
cout<<"0"<<endl;
continue;
}
k1=k1-g;
//k3=k1-1;
k3=0;
for(i=0;i<n;i++)//次数
{ for(j=0;j<=k3;j++)//每位数乘
c[j]=c[j]*r;
j=0;
while(c[j]>=10||j<k3)
{
c[j+1]=c[j+1]+c[j]/10;
c[j]=c[j]%10;
j++;
}
k3=j;
}
j=0; k2=k2*n;
if(k2>k3) k3=k2-1;//考虑是纯小数的情形前要加零
while(c[g3]==0) g3++;//考虑后面都是零的情形要去掉
for(i=k3;i>=g3;i--)
{
if(g&&(i+1==k2))//小数点位置的判断
{
cout<<".";
cout<<c[i];
}
else cout<<c[i];
}
for(i=k3;i>=0;i--)c[i]=0;//初始化c数组和各种参数
g1=0,g2=0,k2=0,g=0,k3=0,r=0,g3=0;
cout<<endl;
}
return 0;
}