PAT(Advanced) 1132 Cut Integer C++实现
题目链接
[1132 Cut Integer[(https://pintia.cn/problem-sets/994805342720868352/problems/994805347145859072)
题目大意
给定K
位的十进制数值Z
,根据其前后两部分分为K/2
的两个数值A
和B
,判断Z
能否被A
和B
的乘积整除,若能则输出Yes
,否则输出No
算法思路
对Z
除基取余法取后K/2
位得到B
,操作后的Z
即为A
,进行判断即可,注意B
为0
的可能会导致取余0
浮点错误,需特殊处理(B
为0
时Z
必然不能0
被整除,返回false
即可)。
AC代码
/*
author : eclipse
email : eclipsecs@qq.com
time : Tue Feb 02 10:54:52 2021
*/
#include<bits/stdc++.h>
using namespace std;
int calculateLength(int number) {
int length = 0;
while (number) {
length++;
number /= 10;
}
return length;
}
bool divided(int Z) {
int A = Z;
int length = calculateLength(A);
int B = 0;
int base = 1;
for (int i = 0; i < length / 2; i++) {
B += (A % 10) * base;
base *= 10;
A /= 10;
}
return B == 0 ? false: Z % (A * B) == 0;
}
int main(int argc, char const *argv[]) {
int N;
scanf("%d", &N);
while (N--) {
int Z;
scanf("%d", &Z);
printf("%s\n", divided(Z) ? "Yes" : "No");
}
return 0;
}
样例输入
3
167334
2333
12345678
样例输出
Yes
No
No
鸣谢
最后
- 由于博主水平有限,不免有疏漏之处,欢迎读者随时批评指正,以免造成不必要的误解!