View Code of Problem 3910

#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.


Back to problem 3910