PAT(A) 1132. Cut Integer (20)

原题目:

原题链接:https://www.patest.cn/contests/pat-a-practise/1132

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

题目大意

将一个数分成左右两部分,若原数能被分开数的积整除,输出Yes,否则输出No。

解题报告

字符串读入,然后分为两个组建Z,A,B,进而判断。同时要注意,A,B为0的情况。

代码

1132. Cut Integer (20)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/*
* 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");
}