计算12345678901×98765432101的积

前不久参加达内的“发现杯”碰到这么个题目,计算12345678901×98765432101的积

赛场没有理清思路,赛后恍悟……
大数相乘算法,从积的位数出发来思考
比如:积的个位=数1的个位×数2的个位;
 积的十位=数1的个位×数2的十位+数1的十位×数2的个位;
 积的百位=数1的个位×数2的百位+数1的十位×数2的十位+数1的百位×数2的个位;
 ...........
最后当然还要给积的每一位进行求余运算,做进位工作

#include "stdafx.h"
#include 
int main(int argc, char* argv[])
{
	int one[11],two[11];
	one[0]=two[0]=1;
	one[1]=two[1]=0;
	int x,z;
	for(x=2;x<11;x++)
	{
		one[x]=11-x;
		two[x]=x-1;
	}
	
	int three[22]={0,};
	for (z=0;z<22;z++)
	{
		for (x=0;x<11&&x<=z;x++)
		{
			if (z-x<11)
			{
				three[z]+=one[x]*two[z-x];
			}
			
		}
	}
	for (z=0;z<22;z++)
	{
		if (three[z]>=10)
		{
			three[z+1]+=three[z]/10;
			three[z]=three[z]%10;
		}
	}
	if (three[21]!=0)
	{
		for (z=21;z>=0;z--)
		{
			printf("%d",three[z]);
		}
	}
	else
		for (z=20;z>=0;z--)
		{
			printf("%d",three[z]);
		}
	return 0;
}

将运行的结果和计算器得出的结果做下比价,即检验程序。

 
  
 
  
 
  
 
  
 
  
 
  
 
  
 
  
 
  
 
  
 
  
 
 

你可能感兴趣的:(数据结构,算法)