题目:有一种特殊的正整数(int类型),将数分为两侧,每侧至少有一位数,两侧的每个数字相加相等,请写出判断的方法用来检测是否这种数。
比如:1236,可以拆分为123和6。
输入:输入的第一行指定用例数量T;用例的第二行输入正整数;
输出:输出是否为特殊的正整数
例如:
intput:
2
1232145
4543622
output:
1
1
-------------------------------------------------------------------------------------------------------------------------------
解题思路:
首先将需要判断的数字分离,依次存进一个vector中,然后再用迭代器对其依次分割,求取两边的和,代码有注释。
#include<iostream>
#include<vector>
using namespace std;
bool is_magicnum(int number)
{
//将数字分离push进vector temp中
vector<int> temp;
while (number)
{
temp.push_back(number % 10);
number /= 10;
}
//it迭代器是用来标记分割点位置,以it所指元素后面这条边为分界线,eg:1236,如果it指向3,则将1236划分为123与6两部分。
//ifront用来对it划分的前一部分数字进行求和
//iback用来对it划分的后一部分数字进行求和
for (vector<int>::iterator it = temp.begin(); it != temp.end()-1; it++)
{
int front=0;
int back=0;
for (vector<int>::iterator ifront = temp.begin(); ifront != it + 1; ifront++)
front += *ifront;
for (vector<int>::iterator iback = it+1; iback != temp.end(); iback++)
back += *iback;
if (front == back) return true;
}
return false;
}
int main()
{
int n;
cin >> n;
int * num = new int[n];
for (int i = 0; i < n; i++)
cin >> num[i];
for(int i=0;i<n;i++)
cout << is_magicnum(num[i])<<endl;
delete[] num;
return 0;
}