PAT-ADVANCED1132——Cut Integer

我的PAT-ADVANCED代码仓:https://github.com/617076674/PAT-ADVANCED

原题链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805347145859072

题目描述:

PAT-ADVANCED1132——Cut Integer

题目翻译:

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++解题报告:

PAT-ADVANCED1132——Cut Integer