一、技术总结
- 题意是理解上给定义一个数字m(假设有4位),让你分割成两块数字A(前两位)和B(后两位),然后判断m/(A*B)能否整除,如果能输出Yes否则输出No。
- 两个点,一个数字怎么分割,一个数字判断。
- 分割首先判断出数字的位数,然后再使用取余和整除来得到A和B;再就是判断了,这里有个地方需要注意,可能出现m = 4000的情况,这样的情况直接输出为No,如果再进行判断可能出现浮点错误,即分母为0。
- 还有就是pow(x, y)指数函数,输出结果为double型,然后取余%必须满足两个操作数都是整型,否则会报错。
二、参考代码
参考一:
#include<iostream>
#include<cmath>
using namespace std;
bool test(int num){
int temp = num, A, B;
int cnt = 0;
while(num > 0){
num /= 10;
cnt++;
}
A = temp/(pow(10, cnt/2));
B = temp%(int)(pow(10, cnt/2));
if(A * B != 0 && temp%(A*B) == 0) return true;
else return false;
}
int main(){
int n;
scanf("%d", &n);
for(int i = 0; i < n; i++){
int num;
scanf("%d", &num);
if(test(num)) printf("Yes
");
else printf("No
");
}
return 0;
}
参考二:
#include <iostream>
using namespace std;
int main() {
int n, num;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &num);
string s = to_string(num);
int len = s.length();
int a = stoi(s.substr(0, len/2));
int b = stoi(s.substr(len/2));
if (a * b != 0 && num % (a * b) == 0)
printf("Yes
");
else
printf("No
");
}
return 0;
}