您的位置:首页 > 其它

POJ 1001 Exponentiation

2012-10-03 18:13 260 查看
测试数据没有问题,但是不知道为什么老得到Wrong Answer

#include <stdio.h>
#include <string.h>
#define MAXLEN    1000
struct decimal
{
int num[MAXLEN];
int len;
int frac;
};

void Product(decimal d1, decimal d2,decimal& d3)
{
int i,j;   //i points to d1,j points to d2
memset(d3.num,0,sizeof(d3.num));
for(j=0;j<d2.len;j++)
for(i=0;i<d1.len;i++)
d3.num[i+j]+=d1.num[i]*d2.num[j];
for(i=0;i<d1.len+d2.len-1;i++)
{
d3.num[i+1]+=d3.num[i]/10;
d3.num[i]=d3.num[i]%10;
}
//here i=d1.len+d2.len-1, the highest bit of d3
int sig=d1.len+d2.len-1;
if(d3.num[sig]!=0)
d3.len=sig+1;
else
d3.len=sig;
//frac
d3.frac=d1.frac+d2.frac;
}
void Reverse(char str[],int len)
{
char x[MAXLEN];
int i;
for(i=0;i<len;i++)
x[i]=str[len-1-i];
for(i=0;i<len;i++)
str[i]=x[i];
}
void Output(decimal& d3)
{
char str[MAXLEN]={0};
int i,j;
for(i=0;i<d3.len && d3.num[i]==0;i++);   //eliminate tail zero
if(i==d3.len)
{
printf("0\n");
return;
}
for(j=0;i<d3.len;i++,j++)
{
str[j]=d3.num[i]+'0';
if(i==d3.frac-1)
{
j++;
str[j]='.';
}
}
//highest bit of str is j-1, len is j;
int len=j;
//eliminate front zero
for(i=len-1;i>=0 && str[i]=='0';i--,len--);

Reverse(str,len);

str[len]='\0';
printf("%s\n",str);
}
//string is ended by '\0'
int CountFrac(char str[])
{
int count=0;
int i;
int len=strlen(str);
for(i=0;i<len;i++)
if(str[i]=='.')
return (len-i-1);
return 0;
}
void str2dec(char str[], decimal& d)
{
int i,j;
int len=strlen(str);
d.frac=CountFrac(str);
d.len=0;
for(i=len-1,j=0;i>=0;i--)
if(str[i]!='.')
{
d.num[j]=str[i]-'0';
d.len++;
j++;
}
}
int main()
{
decimal d1,d2,d3;
char base[10];
int n;
while(scanf("%s%d",base,&n)!=EOF)
{
d1.len=strlen(base);
memset(d1.num,0,sizeof(d1.num));
memset(d3.num,0,sizeof(d3.num));
str2dec(base,d1);
d3.frac=0;
d3.len=1;
d3.num[0]=1;
for(int i=1;i<=n;i++)
Product(d3,d1,d3);
Output(d3);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: