cheng_you_know

学而时习之!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1063

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int memory[130]={1,0};
int len;
void multiplication(int n)
{
int carry=0,i;

for(i=0;i<len;i++)
{
memory[i]=memory[i]*n;
memory[i]+=carry;
carry=memory[i]/10;
memory[i]=memory[i]%10;
}
while(carry!=0)
{
memory[len]=carry%10;
carry=carry/10;
len++;
}

}
int main()
{
char str[7],*p,*q,num[7];
int n,m;
int i;
int point=0,flag;

while(scanf("%6s%2d",&str,&n)==2)
{
len=strlen(str);
point=0;
flag=1;
memset(memory,0,sizeof(memory));
memory[0]=1;
memset(num,0,sizeof(num));
for(i=0;i<len;i++)
{
if(str[i]=='.')
{
flag=0;
break;
}
}
i=len-1;
while(str[i]=='0'&&flag==0) //处理小数后面的0
{
i--;
len--;
}
if(len==0)
{
m=0;
len=1;
}
else
{
p=str;
i=0;
while(str[i]=='0')
{
i++;
p++;
}
len=len-i;
q=p;
i=0;
while(*p!='.'&&i<len)
{
p++;
i++;
}
point=len-i-1;
for(i=0;i<len;i++,q++)
{
if(*q=='.')
{
len--;i--;
}
else
num[i]=*q;
}
if(len==0)
{
m=0;
len=1;
}
else
m=atoi(num);
}
if(m==0&&n==0)
{
printf("1\n");
continue;
}
else if(m==0)
{
printf("0\n");
continue;
}
for(i=0;i<n;i++)
{
multiplication(m);
}
point*=n;
if(point>=len)
{
printf(".");
for(i=0;i<point-len;i++)
printf("0");
for(i=len-1;i>=0;i--)
printf("%d",memory[i]);
}
else
{
for(i=len-1;i>=0;i--)
{
if(i==point-1)
printf(".");
printf("%d",memory[i]);
}
}
printf("\n");
}
}
posted on 2013-07-06 11:36  cheng_you_know  阅读(181)  评论(0编辑  收藏  举报