题目描述
自己看吧
样例
无
算法2
$O(n^2)$
回答之前AC代码里的两个问题
1.在bool函数中for循环内部,不能if - else {return true},原因是你要让循环遍历完才能返回true
2.还是for循环里,正确还是要加上-1,for(int i = A.size();i >= 0;i – ),这样写法是错的
时间复杂度
参考文献
C++ 代码
#include <iostream>
#include <vector>
using namespace std;
bool cmp(vector<int> &A,vector<int> &B)
{
if(A.size() != B.size()) return A.size() > B.size();
else
{
for(int i = A.size() - 1;i >= 0;i -- )//为什么这里- 1 与 不写 - 1结果一样???
{
if(A[i] != B[i]) return A[i] > B[i];
}
return true;
}
}
vector<int> sub(vector<int> &A,vector<int> &B)
{
vector<int> C;
int t = 0;
for(int i = 0;i < A.size(); i ++ )
{
t = A[i] - t;
if(i < B.size()) t -= B[i];
C.push_back((t + 10) % 10);
if(t < 0) t = 1;
else t = 0;
}
while(C.size() > 1 && C.back() == 0) C.pop_back();
return C;
}
int main()
{
string a,b;
cin >> a >> b;
vector<int> A,B;
for(int i = a.size() - 1 ; i >= 0; i --) A.push_back(a[i] - '0');
for(int i = b.size() - 1 ; i >= 0; i --) B.push_back(b[i] - '0');
if(cmp(A,B))
{
auto C = sub(A,B);
for(int i = C.size() - 1; i >= 0;i -- ) cout << C[i];
}
else
{
auto C = sub(B,A);
cout << '-';
for(int i = C.size() - 1; i >= 0 ; i -- ) cout << C[i];
}
return 0;
}
关于t > 0 和 t < 0,
t < 0,就代表借了位,令其等于1,在下一次t = a[i] - t ,就会多减1,效果就是让高位减一
t > 0,令它=0,没影响嘛,继续后续操作