原题目:
原题链接: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的情况。
代码
/*
* 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");
}