当前位置: 首页 > 编程技术 > 正文

C语言实现大数相乘

在c语言中,int型的最大的容纳的数是2的32次方,如果是计算大数的话,使用int得到错误的结果,因此计算较大的数的运算时,需要用到大数相乘,下面是我根据别人的思路用C语言实现的代码:

 

#include <iostream>
#include <string.h>
using namespace std;

#define MaxLen  255 

//char数组转换int数组,并且正序转换为倒序
void chartoint(int * dest,char * source)
{
	int len = strlen(source);
	int i;
	for(i=0;i<MaxLen;i++){  
		*(dest+i) = 0;  //目的整形数组初始化
	}

	for(int j =0;j<len;j++){
		/***************************************************

		由ascii码转为整形,方法为减去0的ascii值 ,并且倒序保存
		dest+len-1-j的作用为将倒序保存

		****************************************************/
		*(dest+len-1-j) =*(source+j) -'0';  
	}


}

void cal(int *a,int *b,int * result)
{
	for(int i=0;i<2*MaxLen;i++){
		*(result+i) =0;                    //数组初始化  
	}

	for(i =0;a[i]!=0;i++){
		for(int j =0;b[j]!=0;j++){
		/**********************************************************
		 
		   这里的+=为上次的计算的结果和这次计算的结果相加,特别重要
		
		  i+j的目的不是二维数组,而是乘法中的进位
		
		***********************************************************/
			*(result+i+j) += (*(a+i))*(*(b+j));  
		
		}
	}

	for(i =0; i<2*MaxLen;i++){
  
		*(result+i+1) += *(result+i) /10;  //满10则进位,特别注意这里是+=,不是=
		*(result+i) = *(result+i)%10;      //不满10的保留,这里是 = ,不是+=
	}
}

int main()
{
	//>>>>>>>>>>>>>>>>定义>>>>>>>>>>>>>>>>>>>>>

	char var1[MaxLen],var2[MaxLen];
	int a[MaxLen],b[MaxLen],c[2*MaxLen];
	int i=MaxLen;

	//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

   //>>>>>>>>>>>>>>>>>输入>>>>>>>>>>>>>>>>>>>>>
	
	cout<<"Please Input Var1"<<":";
    cin>>var1;
	cout<<"Please Input Var2"<<":";
	cin>>var2;

   //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	
	//char转换为倒序int
	chartoint(a,var2); 
	chartoint(b,var1);

	//>>>>>>>>>>>>>>>>大数运算函数 >>>>>>>>>>>>>>>>

	cal(a,b,c);

	//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

	while(c[i] == 0){
		i--;         //倒序找结果的开始地方

	}
	for(int j =i;i>=0;i--){
		cout<<c[i];  //将倒序的结果正序输出
	}
	cout<<endl;



	return 0;
}


本文固定链接: http://kuaile.in/archives/860 | 蒲公英的博客

该日志由 蒲公英 于2012年04月19日发表在 编程技术 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: C语言实现大数相乘 | 蒲公英的博客
关键字:

C语言实现大数相乘:等您坐沙发呢!

发表评论


You must enable javascript to see captcha here!

快捷键:Ctrl+Enter