您的位置:首页 > 其它

hdu 1063 Exponentiation

2015-03-15 16:32 288 查看
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1063

//注意边界,看了其他大神的代码,郁闷。。。

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
#define N 200

int main()
{
//freopen("in.txt","r",stdin);
char input[10];
int result
;
int i,n,r
,t
;
while(~scanf("%s%d",input,&n))
{
memset(result,0,sizeof(result));
memset(r,0,sizeof(r));
memset(t,0,sizeof(t));
t[0]=1;
int j=0;
for(i=5;i>=0;i--)
{
if(input[i]!='.')
r[j++]=input[i]-'0';
}
for(i=0;i<=5;i++)
{
if(input[i]=='.')
break;
}
int flag=5-i;//记录小数点的位置
if(i==6)
flag=0;
if(n==0)
{
printf("1\n");
continue;
}
int h=0;
for(i=0;i<N;i++)
h+=r[i];
if(h==0)
{
printf("0\n");
continue;
}
//printf("%d\n",flag);
int k;
for(k=0;k<n;k++)
{
for(i=0;i<5;i++)
for(j=0;j<N;j++)
result[j+i]+=t[j]*r[i];//运算,未进位。r为每次要乘的数值
for(i=0;i<N;i++)
{
if(result[i]>9)//进位
{
result[i+1]+=result[i]/10;
result[i]%=10;
}
}
for(j=0;j<N;j++)
{
t[j]=result[j];//t为下一次运算保留数值
}
memset(result,0,sizeof(result));//result为本次运算得到的数值
}
for(i=0;i<N;i++)
result[i]=t[i];
int high,low;
for(i=N-1;i>=0;i--)
if(result[i])
{
high=i;
break;
}
for(i=0;i<N;i++)
if(result[i])
{
low=i;
break;
}
//        printf("%d\n",high);
//        printf("%d\n",low);
//        for(i=N-1;i>=0;i--)
//        printf("%d",result[i]);
//        printf("\n");
flag=flag*n-1;
//        printf("%d\n",flag);

if(flag>=high)
{
printf(".");
for(i=flag;i>=low;i--)
printf("%d",result[i]);
}
else if(flag<low)
{
for(i=high;i>flag;i--)
printf("%d",result[i]);
}
else
{
for(i=high;i>=low;i--)
{
if(i==flag)
printf(".");
printf("%d",result[i]);
}
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: