柚子快报激活码778899分享:poj1001

http://www.51969.com/

#include

#include

#include

using namespace std;

int s;

void chen(char a[],char b[])//a=a*b

{ int i,j,k,l,sum,c[410]={0};

l=strlen(a)+strlen(b);

for(i=strlen(b)-1;i>=0;i--)

for(j=strlen(a)-1,k=i+j+1;j>=0;j--,k--)

{ sum=(b[i]-'0')*(a[j]-'0')+c[k];

c[k]=sum%10;c[k-1]+=sum/10;

}

for(i=c[0]?0:1,j=0;i

a[j++]=(c[i]+'0'); a[j]=0;

}

void quw0(char a[]) //去除尾部多余的零

{ int i=strlen(a)-1;

while(a[i]=='0') {a[i]=0;i--;}

}

void jilu(char a[])

{ int i,t;

for(i=0;i

if(a[i]=='.') break;

if(i!=strlen(a)) //有小数点

{

for(i=strlen(a)-1,s=0;i>=1;i--)// s记录小数位数

if(a[i]!='.') s++;

else break;

if(a[i=0]=='0') // 0.0123变成123

{ for(i=2;i

if(a[i]!='0') {strcpy(a,&a[i]);break;}

}

else //将1.4321 变成14321

{ for(t=0,i=1;i

{ if(a[i]=='.') t=1;

if(t) a[i]=a[i+1];

}

a[i]=0;

}

}

}

void show(char a[])

{ int i;

if(s>=strlen(a)) cout<<'.'<

else //不用补零,直接加入小数点输出

{for(i=0;i

if(strlen(a)-s==i) {cout<<'.'<<&a[i]; break;}

else cout<

cout<

}

}

int main()

{

int n; char b[205],a[205];

while(cin>>b>>n)

{ if(n==0) {cout<<1<

s=0;

quw0(b);

jilu(b);

strcpy(a,b);

for(int i=2;i<=n;i++)

chen(a,b);

s*=n; //结果的小数位数

show(a);

}

return 0;

}

 

柚子快报激活码778899分享:poj1001

http://www.51969.com/

查看原文