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的情况。

代码

/*
* 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");
}

你可能感兴趣的:(PAT甲级)