大数减法、加法、乘法

原创 2014年09月14日 16:51:13
#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;
}

相关文章推荐

Java工作利器之常用工具类(二)——数字工具类-大数乘法、加法、减法运算

上篇分享了一下数字转汉字的小功能,这里再分享一下大数相乘、相加、相减的功能。其他的不做过多的铺垫了,我先讲一下各个功能的计算原理。 Ⅰ. 乘法运算 为什么先说乘法运算——因为我先做了乘法运算。其实...

大数加法 减法 乘法 除法 高精度四则运算

1. 加法 输入采用字符数组保存,然后将输入存在整形数组里,然后逐位相加即可,同时注意进位处理。 [cpp] view plaincopy #include    #inc...

大数运算——加法,减法,乘法 .

尝试实现了下大数运算的代码。 原理就是用int型数组模拟一个大数的每个位。 数组的[0]对应的大数的个位。     具体代码如下,主要考虑大于10的元素要进位,负数要借位。   ...

大数加法、减法、乘法、除法实现

〇、准备        这里,我们暂时只考虑正数的情况,负数请自行预处理,首先定义一些公用函数 // num is positive vector toArray(const strin...

大数运算——加法,减法,乘法

尝试实现了下大数运算的代码。原理就是用int型数组模拟一个大数的每个位。数组的[0]对应的大数的个位。  具体代码如下,主要考虑大于10的元素要进位,负数要借位。 #include #includ...
  • hairetz
  • hairetz
  • 2011年04月08日 20:04
  • 11750

大数加法、减法、乘法

大数四则运算——C++实现 大数处理——c++实现   本课题来自我的c++编程作业,文章利用大数处理类,类名:hugeNumber来对大数(编译器自定义的数值类型无法处理的数)进行四...

大数加法,减法,乘法总结

大数问题 即因为要参加运算的数的位数很大,正常的加减乘除运算符精度不够,解决不了的数的运算。 大数运算 就是以数组的形式存储每一位数,模拟正常加减乘除运算的过程。 大数加法 用两个字符型数组分别存储要...

整数大数模拟 高精度加法 高精度减法 高精度乘法 高精度除法 c/c++ java

整数大数模拟 高精度加法 高精度减法 高精度乘法 高精度除法 c/c++ java 大数加法 大数减法 大数除法 大数乘法...

多项式的加、减法和乘法

  • 2008年09月17日 16:59
  • 7KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:大数减法、加法、乘法
举报原因:
原因补充:

(最多只允许输入30个字)