3 | 有一种特殊的正整数(int类型),将数分为两侧,每侧至少有一位数,两侧的每个数字相加相等,请写出判断的方法用来检测是否这种数。 比如:1236,可以拆分为123和6。 | 输入的第一行指定用例数量T; 用例的第二行输入正整数; | 输出是否为特殊的正整数 | bool is_magicnum(int number) intput: 2 1232145 4543622 output: 1 1 |
用双指针可以说是很简单了。
#include "iostream"
#include "algorithm"
#include "vector"
#include "string"
using namespace std;
bool is_magicnum(int number)
{
//用双指针解决这个问题
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;
}
int main()
{
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;
}