求幂

描述求R的n次幂(0.0<r<99.999,0<n<=25)

输入

每行输入两个数Rn

R值占1-6列,n8-9

输出

对应于每一行输入,输出Rn次幂

前导的0不要输出

无意义的0不要输出

如果结果是一个整数,不要输出小数点

最后一行是空行

样例输入

95.123 12
0.4321 20
5.1234 15
6.7592  9
98.999 10
1.0100 12

样例输出

548815620517731830194541.899025343415715973535967221869852721
.00000005148554641076956121994511276767154838481760200726351203835429763013462401
43992025569.928573701266488041146654993318703707511666295476720493953024
29448126.764121021618164430206909037173276672
90429072743629540498.107596019456651774561044010001
1.126825030131969720661201

题目来源

POJ

 

#include <stdio.h>
#include <string.h>

#define MAX 200

char Multiply[MAX];

void MultiplyAB(char A[],char B[])
{
	int i,j,p,m=0,n=0,offset=0;
	int T[MAX]={0};
	
	for(j=strlen(B)-1;j>=0;--j)
	{
		if(B[j]!='.')
		{
			p=offset++;
			for(i=strlen(A)-1;i>=0;--i)
			{
				if(A[i]!='.')
				{
					T[p]+=(B[j]-'0')*(A[i]-'0');
					++p;
				}
				else
				{
					m=strlen(A)-1-i;
				}
			}
		}
		else
		{
			n=strlen(B)-1-j;
		}
	}
	for(i=0;i<p;++i)
	{
		if(T[i]>=10)
		{
			T[i+1]=T[i+1]+T[i]/10;
			T[i]%=10;
		}
	}
	for(i=0;p>=0;--p,++i)
	{
		if(p!=m+n-1)
		{
			Multiply[i]=T[p]+'0';
		}
		else
		{
			Multiply[i]='.';
			Multiply[++i]=T[p]+'0';
		}
	}
	Multiply[i]='\0';
}

void Filter()
{
	int dot=0,i=0;
	while(i<strlen(Multiply))
	{
		if(Multiply[i++]=='.')
		{
			dot=1;
		}
		break;
	}
	if(dot==1)
	{
		i=strlen(Multiply)-1;
		while(Multiply[i]=='0')
		{
			--i;
		}
		Multiply[i+1]='\0';
	}
}

main()
{
	char a[MAX];
	unsigned int i,n;
	while(scanf("%s %d",a,&n)==2)	
	{
		Multiply[0]='1';
		Multiply[1]='\0';
		for(i=1;i<=n;++i)
		{
			MultiplyAB(Multiply,a);
		}
		Filter();
		i=0;
		while(Multiply[i]=='0')
		{
			++i;
		}
		while(i<strlen(Multiply))
		{
			printf("%c",Multiply[i]);
			++i;
		}
		printf("\n");
	}
	printf("\n");
}

不能AC

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值