继续上次的内容,今天我们继续来学习高精度计算————————————————减法,乘法
首先,复习一下减减减减减减减减减减减减减减减减减减法法法法法法法法法法法法法法法法法法法法法法
先上代码
#include<iostream>
using namespace std;
int a1[1001],a2[1001],a3[1001];
bool cmp(string num1,string num2){
if(num1.size()!=num2.size()) return num1.size() < num2.size();
return num1 < num2;
}
int main(){
int flag = 0;
//1存到字符串中
string s1,s2;
int len1,len2;
cin >> s1 >> s2;
if(cmp(s1,s2)){
flag = 1;
swap(s1,s2);
}
//2拆解到数组中(倒叙)
len1 = s1.size();
len2 = s2.size();
for(int i = 0;i <len1;i++){
a1[i] = s1[len1-1-i] - '0';
}
for(int i = 0;i < len2;i++){
a2[i] = s2[len2-1-i]-'0';
}
//3减法
for(int i = 0;i < len1;i++) a3[i] = a1[i] - a2[i];
//4处理退位
for(int i = 0;i < len1;i++){
if(a3[i]<0){
a3[i]+=10;
a3[i+1] = -1;
}
}
//处理前置0
while(len1 > 1 && a3[len1 - 1]==0){
len1--;
}
//输出
if(flag==1) cout<<'-';
for(int i = len1 - 1;i >= 0;i--) cout<<a3[i];
return 0;
}
解释上周的内容中有哦!!记得看!!
然后,,,,快乐的乘法来喽
说真的比减法简单
上代码
#include<iostream>
using namespace std;
int a1[105],a2[105],a3[105];
int main(){
string s1,s2;
int len1,len2;
cin >> s1 >> s2;
len1 = s1.size();
len2 = s2.size();
for(int i = 0;i <len1;i++){
a1[i] = s1[len1-1-i] - '0';
}
for(int i = 0;i < len2;i++){
a2[i] = s2[len2-1-i]-'0';
}
//3乘法操作
for(int i = 0;i < len1;i++){
for(int j = 0;j <len2;j++){
a3[i+j]+=a1[i]*a2[i];
}
}
//4处理进位
int len = len1+len2-1;//进位
for(int i = 0;i <len;i++){
a3[i+1] += a3[i]/10;//乘法计算
a3[i]%=10;
}
//5处理最高位置 防止遗漏最高位
if(a3[len] > 0) len++;
//6 倒序输出
for(int i = len-1;i>=0;i--) cout<<a3[i];
return 0;
}