PAT(A) 1132. Cut Integer (20)

1132. Cut Integer (20)

Cutting an integer means to cut a K digits long integer Z into two integers of (K/2) digits long integers A and B. For example, after cutting Z = 167334, we have A = 167 and B = 334. It is interesting to see that Z can be devided by the product of A and B, as 167334 / (167 x 334) = 3. Given an integer Z, you are supposed to test if it is such an integer. Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N (<= 20). Then N lines follow, each gives an integer Z (10<=Z<=231). It is guaranteed that the number of digits of Z is an even number.

Output Specification:

For each case, print a single line "Yes" if it is such a number, or "No" if not.

Sample Input: 3 167334 2333 12345678 Sample Output: Yes No No

代码

/*
* Problem: 1132. Cut Integer (20)
* Author: HQ
* Time: 2018-03-13
* State: Done
* Memo: 字符串
*/
#include "iostream"
#include "string"
using namespace std;

string s;
int N,Z, A, B;

int main() {
cin >> N;
for (int i = 0; i < N; i++) {
cin >> s;
int l = s.size();
Z = A = B = 0;
for (int j = 0; j < l / 2; j++) {
A = A * 10 + s[j] - '0';
Z = Z * 10 + s[j] - '0';
}
for (int j = l / 2; j < l; j++) {
B = B * 10 + s[j] - '0';
Z = Z * 10 + s[j] - '0';
}
if(A == 0 || B == 0)
cout << "No" << endl;
else if (Z % A != 0)
cout << "No" << endl;
else if((Z / A) % B != 0)
cout << "No" << endl;
else
cout << "Yes" << endl;
}
system("pause");
}