C++高精度运算(大数处理) 加法、乘法、阶乘

1、概述

对大数的处理一般有两种方式一是运用字符串,二是运用数字数组。两种方式各有优劣,字符串输入输出方便但要考虑数字和字母的转化且有尾数限制,而数字数组只能一位一位的输入。

2、思路说明

本次处理,思路源自加法和乘法竖式。

不管是加法还是乘法,都是按位处理。

加法要注意进位,乘法要注意进位和补零。

关于大数处理写过一次后可以反复用,很舒服。

3、代码

#include
#include
using namespace std;
//字符串倒置
string reverse(string a){
	string c;
	int j=0;	
	for(int i=a.length()-1;i>=0;i--){
		c+=a[i];
	}
	
	return c;
}
//将int转化为string
string IntToStr(int a){
	string num="";
	while(a>0){
		num+=a%10+'0';
		a=a/10;
	}
	num=reverse(num);
	return num;
} 


//加法 
string add(string a,string b){
	a=reverse(a);
	b=reverse(b);
	int i=0;
	int sign=0;
	string num;
	while(a[i]!='\0'&&b[i]!='\0'){
		int z=a[i]+b[i]+sign-'0'-'0';
		if(z>=10){
			z=z%10;
			num+=z+'0';
			sign=1;
		}else{
			num+=z+'0';
			sign=0;
		}
		i++;
	}
	if(a.length()>b.length()){
		while(a[i]!='\0'){
			int z=a[i]-'0'+sign;
			if(z>=10){
				z=z%10;
				num+=z+'0';
				sign=1;
			}else{
				num+=z+'0';
				sign=0;
			}
			i++;
		}
		if(sign!=0){
			num+=sign+'0';
		}
	}
	else if(a.length()==b.length()){
		if(sign!=0){
			num+=sign+'0';
		}
	}
	else if(a.length()=10){
				z=z%10;
				num+=z+'0';
				sign=1;
			}else{
				num+=z+'0';
				sign=0;
			}
			i++;
		}
		if(sign!=0){
			num+=sign+'0';
		}
	}
	num=reverse(num);
	return num;
}
//乘法 
string mul(string a,string b){
	a=reverse(a);
	b=reverse(b);
	int i=0;
	int sign=0;
	int m=0;
	string num="0";
	string temp="";
	
	for(int i=0;i>n;
	string num="0";
	for(int i=1;i<=n;i++){
		num=add(num,fact(i));//对1到n(包括1、n)求阶乘而后相加
	}
	cout<

 

你可能感兴趣的:(算法,算法,c++)