#include
#include
#include
using namespace std;
char ArrString[205], BrrString[205];
// 自定义的取最大值函数
int max(int a, int b){
if(a >= b){
return a;
}else{
return b;
}
}
int main(){
int len = 0;
cin >> ArrString; // 输入第一个字符串
cin >> BrrString; // 输入第二个字符串
len = max(strlen(ArrString), strlen(BrrString)); // 获取两个字符串的最大长度
int ArrInt[205] = {0}; // 存储第一个字符串的整型数组
int BrrInt[205] = {0}; // 存储第二个字符串的整型数组
int CrrInt[205] = {0}; // 存储结果的整型数组
int Alen = strlen(ArrString); // 第一个字符串的长度
int Blen = strlen(BrrString); // 第二个字符串的长度
// 将第一个字符串转换为整型数组,高位在后,低位在前
for(int i = 0; i < Alen; i++){
ArrInt[Alen - i] = ArrString[i] - '0';
}
// 将第二个字符串转换为整型数组,高位在后,低位在前
for(int i = 0; i < Blen; i++){
BrrInt[Blen - i] = BrrString[i] - '0';
}
// 逐位相减并处理借位
for(int i = 1; i <= len; i++){
CrrInt[i] += ArrInt[i] - BrrInt[i]; // 当前位的值等于同位相减之差
if(CrrInt[i] < 0){ // 若差小于0,需要向高位借位
CrrInt[i + 1]--; // 下一位减去1
CrrInt[i] = 10 + CrrInt[i]; // 当前位加上10
}
CrrInt[i] = CrrInt[i] % 10; // 当前位只保留个位数
}
// 去除前导零
while(CrrInt[len + 1] == 0 && len > 0){
len--;
}
// 输出结果
for(int i = len + 1; i > 0; i--){
cout << CrrInt[i];
}
}
代码逻辑:
cin
分别输入两个字符串ArrString
和BrrString
。strlen
函数获取两个字符串的长度,并取其中较长的长度作为变量len
的值。ArrInt
、BrrInt
和CrrInt
,分别用于存储两个字符串转换的整型数组以及相减结果的整型数组。ArrString
和BrrString
中的字符转换成整型存入ArrInt
和BrrInt
数组中,高位在后,低位在前。ArrInt
和BrrInt
逐位相减,并考虑借位情况。若差小于0,则需要向高位借位,即下一位减去1,当前位加上10。CrrInt
数组中。CrrInt
中的前导零。CrrInt
中的数字。请注意,该代码假设第一个输入的大整数(被减数)大于等于第二个输入的大整数(减数)。如果需要处理减数大于被减数的情况,需要在代码中作出相应修改。