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 <2
31
). 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
substr的第二个参数是复制个数!!不是结尾下标
#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll;
int main(){
int n;
cin>>n;
string z, a, b;
for(int i = 0; i < n; i++){
cin>>z;
a = z.substr(0,z.length()/2);
b = z.substr(z.length()/2);
if(stoi(a) == 0 || stoi(b) == 0){
cout<<"No\n";
continue;
}
if(stoi(z) % (stoi(a)*stoi(b)) == 0) cout<<"Yes\n";
else cout<<"No\n";
}
return 0;
}
二刷,记住被除数不能为0,不管是除法还是取余,不然会有浮点错误
#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll;
int main(){
int n;
string x,s1,s2;
cin>>n;
for(int i = 0; i< n; i++){
cin>>x;
int length = x.length()/2;
s1 = x.substr(0,length);
s2 = x.substr(length,length);
if(stoi(s1) == 0 || stoi(s2) == 0){
cout<<"No\n";
continue;
}
if(stoi(x)%(stoi(s1) * stoi(s2)) == 0) cout<<"Yes\n";
else cout<<"No\n";
}
return 0;
}