pat 1132
1132 Cut Integer (20分)
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 <). 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
题意:把一个偶数位的数z截成等长度的两段数a和b,问这个数z是否整除a*b
思路:char数组读入数字,然后截取,转换成整数。
注意:有时候a*b=0,要特判一下,否则产生浮点错误(测试点2、3)
代码如下:
#include<cstdio> #include<cstring> void fun(char num[]){ int len=strlen(num); long long a=0; long long b=0; long long z=0; for(int i=0;i<len/2;i++){ a=a*10+num[i]-'0'; } for(int i=len/2;i<len;i++){ b=b*10+num[i]-'0'; } for(int i=0;i<len;i++) z=z*10+num[i]-'0'; if(a*b==0) printf("No"); else{ if(z%(a*b)==0) printf("Yes"); else printf("No"); } } int main(){ int n; scanf("%d",&n); char num[15]; for(int i=0;i<n;i++){ scanf("%s",num); fun(num); printf("\n"); } return 0; }