POJ#1001

POJ#1001 我的想法很简单,把数字当作整数运算后再转化为小数。原理是(xx.x)^n=(xx.x*10)^n/10^n。要注意的就是高精度乘法的实现和输出时整数部分和小数部分的处理。下面附上还在WA中的代码,还在查错中,如果看官发现了错误还请提醒。。。
#include <stdio.h>
#define N 1000
int main(int argc, char *argv[])
{
	int r,jin,i,j,k,f,len;//jin小数点位置 
	char input[5]={0},data[5]={0};
	char temp[N]={0},mul,muler[N]={0};
	while(scanf("%s%d",input,&r)!=EOF){
		j=0,k=0,f=0;
		for(i=0;i<3;i++)
			if(input[i]=='.')
				jin=5-i;
		for(i=5;i>=0;i--){
			if(i!=(5-jin)){
				data[j]=input[i]-'0';
				muler[j]=data[j];
				j++;
			}
			else{
				data[j]=input[i-1]-'0';
				muler[j]=data[j];
				i--; j++;
			}
		}
		len=4;
		for(i=0;i<r-1;i++)	//*******高精度****************
		{
			for(j=0;j<5;j++){
				mul=data[j];
				f=j;	//f为当前和的位置 
				for(k=0;k<len+2;k++){
					temp[f]=mul*muler[k]+temp[f];
					temp[f+1]=temp[f]/10+temp[f+1];
					temp[f]=temp[f]%10;
					f++;
				}
			}
			temp[f]='a';
			for(j=0;temp[j]!='a';j++)
				len=j;	//取temp长度 
			temp[f]=0;
			for(j=0;j<len+1;j++){
				muler[j]=temp[j];
				temp[j]=0;
			}
		}					//***************************** 
		for(i=len;i>(jin*r-1);i--){
			muler[i+1]=muler[i];
		}
		muler[jin*r]='.'-'0';
		for(i=len+1;i>=0;i--)
			muler[i]=muler[i]+'0';
		f=1,k=1;
		for(i=len+1;i>jin*r;i--){
			if(f){
				if(muler[i]=='0')
					f=1;
				else{
					printf("%c",muler[i]);
					f=0;
				}
			}else
				printf("%c",muler[i]);
		}
		for(i=0;i<jin*r;i++){
			if(k){
				if(muler[i]=='0')
					k=1;
				else{
					k=0;
					break;
				}
			}
		}
		for(j=jin*r;j>=i;j--)
			printf("%c",muler[j]);
		printf("\n");
		for(i=0;i<=len+1;i++){
			muler[i]=0;
			temp[i]=0;
		}
	}
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值