将字符串转为数组,进行减法模拟运算;
代码+详细注释
小小蒟蒻的代码若有错误或不足,欢迎各位大佬指正
class Solution {
public:
bool com(string s1,string s2){//判断两个字符串哪个大,要用大数减小数;
int u=s1.size(),v=s2.size();
if(u!=v)
return u>v;
for(int i=0;i<u;i++){
if(s1[i]!=s2[i]){
return s1[i]>s2[i];
}
}
return true;
}
string substring(string num1, string num2) {
// write code here,
int flag=0;
vector<int>vec1(100100); //数组一定要开大一点,容易越界;
vector<int>vec2(100100);
if(!com(num1,num2)){ //进入判断,若第二个字符串大则交换,并进行标记;
flag=1; //标记,后续加负号;
num1.swap(num2);
}
int n1=num1.size(),n2=num2.size();
for(int i=0;i<n1;i++){ //字符串转数组;(倒着存储有助于我们后面减的时候,对齐数位)
vec1[n1-i]=num1[i]-'0';
}
for(int i=0;i<n2;i++){ //字符串转数组;(同理)
vec2[n2-i]=num2[i]-'0';
}
int n=max(n1,n2); //差数组的长度选择两个数组中最大长度的数组;
vector<int>c(100100);
for(int i=1;i<=n;i++){ //减法模拟
if(vec1[i]<vec2[i]){ //若小于则向后借10;(因为前面数组是倒着存储的)
vec1[i+1]--; //后面的数减1;
vec1[i]+=10; //借10;
}
c[i]=vec1[i]-vec2[i];//两数相减;
}
while(c[n]==0&&n>1){ //删除前导0;
n--;
}
string a="";
if(flag){
a+="-"; //若被标记过,则加负号;
}
for(int i=n;i>0;i--){
a+=to_string(c[i]);//将数组转为字符;
}
return a;
}
};
创作不易,可否求个小赞赞



京公网安备 11010502036488号