poj1001(高精度【乘法】)

本文提供了一种解决 POJ 1001 编程题的有效方法,通过 C 语言实现了一个计算多项式乘法的程序,并成功通过了评测。文章直接展示了源代码,方便读者理解算法细节。

                 唉,这道题测试了好长时间才过,不过最后还是挺高兴的,呵呵。。

                 题目:http://poj.org/problem?id=1001

                 就不多说啦,直接看代码吧!!!!!

代码:

Source Code

Problem: 1001  User: 851873134 
Memory: 200K  Time: 0MS 
Language: C  Result: Accepted 

Source Code 
#include<stdio.h>
#include<string.h>
int an1[6];
int result[30][300];
char a[7];
int N,dnum,lenr[30];
void chen(int m)
{
     int i,j;
     memset(result[m],0,sizeof(result[m]));
     lenr[m]=m*5;
	 for(i=0;i<lenr[m];i++)
		 for(j=0;j<6;j++)
		   result[m][i+j]+=result[m-1][i]*an1[j];
	 for(i=0;i<lenr[m];i++)
	 {
		 if(result[m][i]>=10)
		 {
			 result[m][i+1]+=result[m][i]/10;
			 result[m][i]%=10;
		 }
	 }
}
int main()
{   
	while(scanf("%s%d",a,&N)!=EOF)
	{
      int i,j,k,num0=0,flag=0;
	  dnum=0;
	  j=1;
	  k=0; 
	  result[0][0]=1;
	  for(i=5;i>=0;i--)
	  {  
		  if(a[i]-'.'!=0)
			{
			  result[0][j++]=0;
			  an1[k++]=a[i]-'0';
			}
		   else dnum=5-i;
	  }
      for(i=5;i>=0;i--)
	     if(a[i]-'0'!=0)break;
		  else num0++;
	for(i=1;i<=N;i++)
	     chen(i);
      for(i=N*5;i>=0;i--)
	  { 
		  if(i==num0*N-1)break;
		  if(i==dnum*N-1)
		  {
			  printf(".");
			  flag=1;
		  }
		  
		 if(flag)
			 printf("%d",result[N][i]);
		 else if(result[N][i])
		 {
			 printf("%d",result[N][i]);
			 flag=1;
		 }
	  }
		 printf("\n");
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值