PAT-ADVANCED1132——Cut Integer
我的PAT-ADVANCED代码仓:https://github.com/617076674/PAT-ADVANCED
原题链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805347145859072
题目描述:
题目翻译:
1132 切割整数
切割整数意味着将一个由K个数字组成的整数Z分隔成两个由K / 2个数字组成的整数A和B。举个例子,切割Z = 167334,我们得到A = 167,B = 334。有趣的是,Z可以被A和B的乘积整除,比如167334 / (167 * 334) = 3。给定一个整数Z,你需要检验其是不是这样的一个整数。
输入格式:
每个输入文件包含一个测试用例。对每个测试用例,第一行给定一个正整数N(<= 20)。紧接着N行每行给出一个整数Z(10 <= Z <= 2 ^ 31)。题目保证Z由偶数个数字组成。
输出格式:
对每个测试用例,如果该数字是这样的一个数字,在一行中打印“Yes”,否则,打印"No"。
输入样例:
3
167334
2333
12345678
输出样例:
Yes
No
No
思路:注意A * B可能等于0,否则测试点2和3会报浮点错误
为防止越界,用long long型存储数据。
C++代码:
#include<iostream>
#include<cstring>
long long changeToNum(char* input, int left, int right);
int main(){
int N;
scanf("%d", &N);
char input[15];
long long Z, A, B;
for(int i = 0; i < N; i++){
scanf("%s", input);
Z = changeToNum(input, 0, strlen(input) - 1);
A = changeToNum(input, 0, strlen(input) / 2 - 1);
B = changeToNum(input, strlen(input) / 2, strlen(input) - 1);
if(A * B != 0 && Z % (A * B) == 0){ //注意A * B如果是0,需要输出"No"
printf("Yes\n");
}else{
printf("No\n");
}
}
return 0;
}
long long changeToNum(char* input, int left, int right){
long long result = 0;
for(int i = left; i <= right; i++){
result = result * 10 + input[i] - '0';
}
return result;
}
C++解题报告: