PAT-A 真题 – 1132 Cut Integer

发布于 / PAT-甲级 / 0 条评论

Cutting an integer means to cut a K digits lone 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 × 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。

判断是否整除时,先用double型的数字除一遍,再用int除并转成double,判断两个数是否相等即可

#include <iostream>
#include <bits/stdc++.h>
using namespace std;

bool Judge(string a){
  string a_0, a_1;
  for(int i = 0; i < a.length() / 2; i++)
    a_0 += a[i];
  for(int i = a.length() / 2; i < a.length(); i++)
    a_1 += a[i];
  int _a_0 = stoi(a_0), _a_1 = stoi(a_1), _a = stoi(a);
  if(_a_0 * _a_1 == 0) return false;
  return 1.0 * _a / (_a_0 * _a_1) == (double)(_a / (_a_0 * _a_1));
}

int main(){
  int cnt;
  cin >> cnt;
  while(cnt--){
    string n;
    cin >> n;
    if(Judge(n)) cout << "Yes" << endl;
    else cout << "No" << endl;
  } 
  return 0;
}

转载原创文章请注明,转载自: 斐斐のBlog » PAT-A 真题 – 1132 Cut Integer
目前还没有评论,快来抢沙发吧~