大数减法、加法、乘法

#include<iostream>
#include<string>
using std::string;
using std::cin;
using std::cout;
using std::endl;

//字符转换为字面数字
int CharToInt(char value){
	return value-'0';
}
 

//打印结果函数
void print(int* array,int length ){  
	int index=length-1;
	for(int i=length-1;i>=0;--i){ 
		//当遇到第一个不为0的数字
		if(array[i]!=0 || i==0){
			index=i;
			break;
		}
	}
	for(int j=index;j>=0;--j){
		cout<<array[j];
	}
	cout<<endl;
}

//加法函数
void add(int* arr1,int length1,int* arr2,int length2){ 
	for(int i=0;i<(length1>length2?length1:length2);++i){
		if(arr1[i]+arr2[i]>=10){
			arr1[i]=(arr1[i]+arr2[i])%10;
			//进位
			++arr1[i+1];
		}
		else{
			arr1[i]=arr1[i]+arr2[i];
		}
	}
}

//减法,确保减数比被减数大
void sub(int* arr1,int length1,int* arr2,int length2){
	int index1=length1-1,index2=length2-1;
	while(index2>=0){
		//如果该位数字不用借位 
		if(arr1[index1] >= arr2[index2]){
			arr1[index1]-=arr2[index2];
		}
		else{
			arr1[index1]=arr1[index1]+10-arr2[index2];
			arr1[index1-1]-=1;
		} 
		--index1;
		--index2;
	}
	//借位
	while(index1>=0){
		if(arr1[index1]<0){
			arr1[index1]+=10;
			arr1[index1-1]-=1;
		}
		--index1;
	}
}

//乘法函数
void mul(int* arr1,int length1,int* arr2,int length2){ 
	int sum(0);
	//开辟一个空间存储乘积
	int result[500]={0};
	for(int i=0;i<length1;++i){ 
		sum=0;
		for(int j=0;j<length2;++j){
			//两个数字的乘积
			sum=arr1[i]*arr2[j] ;

			//如果乘积大于等于10
			if(sum>=10){
				//乘法需要计算他的位置,例如10乘以10,则在百位
				result[i+j]+=sum%10;
				//进位
				result[i+j+1]+=sum/10;
			}
			else{
				result[i+j]+=sum;
			}	
		}
	}
	int full(0);
	//保存乘积的数组,处理进位
	for(int n=0;n<500;++n){ 
		if(result[n]>=10){
			full=result[n]/10;
			result[n]%=10;
			result[n+1]+=full;
		}
	}
	print(result,500);
}



int main(){
	string str1,str2;
	cin>>str1>>str2;


	int array1[500]={0},array2[500]={0};
	
	std::string::size_type length1=str1.size();
	std::string::size_type length2=str2.size();

	int index(0);
	//读入数组
	for(int i=length1-1;i>=0; --i){ 
		array1[index++]=CharToInt(str1[i]);  
	} 
	index=0;
	for(int j=length2-1;j>=0;--j){  
		array2[index++]=CharToInt(str2[j]); 
	} 
	mul(array1,length1,array2,length2);
//	print(array1,500); 
	return 0;
}

阅读更多
想对作者说点什么? 我来说一句

大数的四则运算(附代码)

2013年10月21日 16KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭