上文:高精度算法和高精度算法—加法计算
- 1.位数相同无借位
- 2.位数不同无借位
- 3.位数不一定相同可能借位
我们还是由浅入深,逐步推进 1.位数相同无借位
思路
数据处理:
1.用字符数组存储高精度数
计算:
1.和加法类似,遍历字符数组,转化为数字后进行相减
2.如果出现类似结果为00000100的情况,还要处理前缀的0
代码实现:
#include#include using namespace std; int main(){ //输入 char a[1001]={}; char b[1001]={}; int result[1001]={}; cout<<"输入被减数"; gets(a); cout<<"输入减数" ; gets(b); int len=strlen(a); //计算 for(int i=0;i 2.位数不同无借位 思路
数据处理:
1.用字符串存储高精度数
2.逆序对齐
计算
1.相减,结果再逆序
2.去0输出这次我们尝试用STL来写
代码:#include#include #include #include using namespace std; int main(){ //输入 string a,b; cin>>a>>b; vector c; reverse(a.begin(),a.end()); reverse(b.begin(),b.end()); int min=(a.size() 3.位数不一定相同可能借位 之前默认了减数均小于被减数,这次尝试实现出来
思路:
1.先比较2个数的大小
2.逆序后相减,注意借位
3.得出结果#includeusing namespace std; bool compare(string a,string b){ int a_size=a.size(); int b_size=b.size(); //根据字符串长度区分3种情况 if(a_size>b_size){ return true; } else if(a_size =b[i]){ return true; } else{ return false; } } } void sub(string a,string b){ reverse(a.begin(),a.end()); reverse(b.begin(),b.end()); //借位x初始为0 int result[100]; int min=b.size(),x=0,k=0,temp=0; //两数相减 for(int i=0;i >a>>b; if(compare(a,b)){ sub(a,b); } else{ sub(b,a); } return 0; }



