这道题真是花了我不少时间,它涉及到的细节太多,wa了四次,有三次编译错误,真有点崩溃了断断续续做了大概有一天了,一直修改错误,没办法,细节真是太多了,比如说10.0000,是要输出10的,而我只输出了1,反正就是有各种各样的变态数据测试,编译错误竟然是因为我定义的int类型函数没有返回值,据说c++是比较严谨的,所以改成void后就A了昨天下午A的,前天上午算法设计课上看的题目,,,,昨天晚上去看电影了,刘德华,井柏然主演的失孤,好了,放代码了
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int a[202],d[20],c[202],e[202];
char b[20];
int i,j,n,num,y1,x1,m,q,k,up,up1;
void mul()
{
for(int p=2;p<=n;p++)
{
memset(e,0,sizeof(e));
for(i=y1;i>=0;i--)
{
memset(c,0,sizeof(c));
k=200-y1+i,up=0;
for(j=200;j>m;j--)
{
c[k]=d[i]*a[j]+up;
up=c[k]/10;
c[k]=c[k]%10;
k--;
}
if(up!=0)
c[k--]=up;
for(q=200,up1=0;q>k;q--)
{
e[q]=e[q]+c[q]+up1;
up1=e[q]/10;
e[q]=e[q]%10;
}
if(up1!=0)
e[q--]=up1;
}
m=q;
for(int y=200;y>q;y--)
a[y]=e[y];
}
}
void print()
{
if(n==1)
{
j=y1;
for(i=200;i>x1;i--)
e[i]=d[j--];
q=x1;
}
int w=200;
for(int y=w;y>q;y--)
{
if(e[y]==0&&y!=200-num*n)
w--;
else
break;
}
if(w==q)
printf("%d",0);
else
{
int flag=0;
if(num==5)
{
printf(".");
flag=1;
}
for(int y=q+1;y<=w;y++)
{
if(e[y]==0&&!flag&&y!=(200-num*n))
continue;
if(flag||e[y]!=0)
printf("%d",e[y]);
if(y==(200-num*n)&&y!=w)
printf(".");
flag=1;
}
}
printf("\n");
}
int main()
{
while(scanf("%s%d",b,&n)!=EOF)
{
if(n==0)
{
printf("%d\n",1);
continue;
}
num=0;
memset(a,0,sizeof(a));
memset(d,0,sizeof(d));
memset(e,0,sizeof(c));
for(i=0;b[i]!='\0';i++)
{
if(b[i]=='.')
{
num=5-i;
for(j=i;b[j]!='\0';j++)
b[j]=b[j+1];
}
d[i]=b[i]-48;
}
if(num==0)
x1=194,y1=5;
else
x1=195,y1=4;
m=x1,j=y1;
for(i=200;i>x1;i--)
a[i]=d[j--];
mul();
print();
}
return 0;
}