数据结构——高精度加法笔记和训练

0 阅读1分钟

高精度加法:

解决整型数据精度不够的问题,通过数组来容纳数字的每位数从而实现精度自由

方法;逆序

要点1:在两数每位相加后不超过9的情况下,做到字符串相加;

要点2:若超过9,则需进位,则前一位数加1;

要点3:若最高位超过9,则需添加一位数; eg:

此程序目标:1234 加 9911 等于 11145

基于以上思考来调整算法

#include<iostream>
using namespace std;

void Switch(string str,int a[]);
//src.size() 和 src.length() 功能完全一样,都是返回字符串长度,只是命名不同:
int main(){
	string s1,s2;
	int a[101]={0},b[101]={0},c[101]={0};
	int i;
	cout<<"请输入s1、s2:";
	cin>>s1>>s2;
	Switch(s1,a);
	Switch(s2,b);
	int la=s1.size();
	int lb=s2.size();
	int lc=max(la,lb)+1;
	/*中途检验用
        for(i=0;i<4;i++)
            cout<<a[i];
            cout<<endl;
	for(i=0;i<4;i++)
		cout<<b[i];
	*/		
	for(i=0;i<lc;i++){
		c[i]=a[i]+b[i]+c[i];
		c[i+1]=c[i]/10;
		c[i]=c[i]%10;
	}
	while (lc > 1 && c[lc-1] == 0) {
	    lc--;
	} //把逆序时的结果前面的零全部删掉
	for(int j=lc-1;j>=0;j--){
		cout<<c[j];
	}
}

void Switch(string str,int a[]){
	for(int i=0;i<str.size();i++){
		a[str.size()-1-i]=str[i]-'0';
	}
}

image.png 结果运行顺利!