手撕代码锻炼 字符串相减
作者:
liweidong
,
2023-03-20 10:59:15
,
所有人可见
,
阅读 170
/*
* 两个指针i,j,分别从末端向前走
* sum = i+j+bit
* rest 求解除去进位的和
* bit 求解进位
*
* 注意对剩余子串的相加
* 对bit的相加
*/
#include <iostream>
#include <vector>
using namespace std;
/*
* i,j分别从两个字符串末尾开始前进
* i+bit能够减去j,直接减(注意-'0')
* i+bit无法减去j,加10再减,维护bit = -1
*
* 第一个字符串剩余部分,bit剩余部分
*
*
*/
string stringSub(string &num1, string &num2) {
int n = num1.size();
int m = num2.size();
// i,j分别从两个字符串末尾开始前进
int i = n-1, j = m-1;
int bit = 0;
string res;
while(i>=0 && j>=0){
int t = num1[i]-'0' + bit - (num2[j]-'0');
// 无法减,借位
if(t<0){
t = num1[i]-'0' + bit - (num2[j]-'0') + 10;
bit = -1;
}
res = to_string(t) + res;
i --, j--;
}
// 剩余的字符串和进位
while(i>=0){
int t = num1[i]-'0' + bit;
// 无法减,借位
if(t<0){
t = num1[i]-'0' + bit + 10;
bit = -1;
}
res = to_string(t) + res;
i --;
}
return res;
}
int main() {
string num1 = "456";
string nums2 = "77";
cout<<stringSub(num1, nums2)<<endl;
return 0;
}