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; }