2018 Dahua Software Competition - Simulation Competition - Question 3

3 There is a special positive integer (int type) that divides the number into two sides, each side has at least one digit, and each number on both sides adds up to be equal. Please write a judgment method to detect whether it is such a number.
For example: 1236, can be split into 123 and 6.
The first line of input specifies the number of use cases T;
the second line of use cases inputs a positive integer;
whether the output is a special positive integer bool is_magicnum(int number)

intput:
2
1232145
4543622

output:
1
1

Using double pointers can be said to be very simple.

#include "iostream"
#include "algorithm"
#include "vector"
#include "string"
using namespace std;


bool is_magicnum(int number)
{
	// Solve this with double pointers
	vector<int> num;
	while (number)
	{
		num.push_back(number % 10);
		number /= 10;
	}
	int left = 0, right = num.size() - 1;
	int sumleft = num[left]; int sumright = num[right];
	while (right - left > 1)
	{
		if (sumleft < sumright)
		{
			left++;
			sumleft += num[left];
		}
		else if (sumleft > sumright)
		{
			right--;
			sumright += num[right];
		}
		else
		{
			if (right - left > 2)
			{
				left++;
				sumleft += num[left];
				right--;
				sumright += num[right];
			}
			else
			{
				if (num[left + 1] == 0)
					return true;
				else
					return false;
			}
		}
	}
	if (sumleft == sumright)
		return true;
	else
		return false;
}


intmain()
{
	int size;
	cin >> size;
	vector<int> data(size, 0);
	for (int i = 0; i < data.size(); i++)
	{
		cin >> data[i];
	}
	for (int i = 0; i < data.size(); i++)
		data[i] = is_magicnum(data[i]);
	for (int i = 0; i < data.size(); i++)
		cout << data[i] << endl;
	while (1);
	return 0;
}


Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324841563&siteId=291194637