#include<iostream> #include<vector> using namespace std; void solve(vector<int>s,int n,int k) { int ff = 0; for (int i = 1; i < s.size(); i++) if (s[i] != 0) { ff = 1; break; } if (ff == 0 && k==0) { cout << 0 << endl; return; } if (k == 0) { /*s表示原码*/ if (s[0] == 1) cout << "-"; int f = 0; for (int i = 1; i < s.size(); i++) { if (s[i] != 0) { f = 1; for (int k = i; k < s.size(); k++) cout << s[k]; } else { continue; } break; } if (f == 0) cout << 0; cout << endl; } else { /*s表示补码*/ if (s[0] == 0) { int f = 0; for (int i = 1; i < s.size(); i++) { if (s[i] != 0) { f = 1; for (int k = i; k < s.size(); k++) cout << s[k]; } else continue; break; } if (f == 0) cout << 0; cout << endl; return; } int flag = 0; for (int i = 1; i < s.size(); i++) { if (s[i] == 1) flag = 1; s[i] = (s[i] + 1) % 2; //按位取反 } /* +1 */ int jin = 0; s[s.size() - 1] = s[s.size() - 1] + 1; if (s[s.size() - 1] == 2) { s[s.size() - 1] = 0; jin = 1; for (int i = s.size() - 2; i > 0; i--) { int sum = s[i] + jin; s[i] = (sum) % 2; if (sum == 2) jin = 1; else { break; } } } if (s[0] == 1) cout << "-"; if (flag == 0) { cout << 1; for (int i = 0; i < s.size()-1; i++) cout << 0; cout << endl; return; } int f = 0; for (int i = 1; i < s.size(); i++) { if (s[i] != 0) { f = 1; for (int k = i; k < s.size(); k++) cout << s[k]; } else continue; break; } if (f == 0) cout << 0; cout << endl; } } int main() { int T; cin >> T; while (T--) { int n,k; cin >> n >> k; string str; cin >> str; vector<int>s; for (int i = 0; i < n; i++) { s.push_back(str[i] - '0'); } solve(s,n,k); s.clear(); } } |
Double click to view unformatted code.