关于算法-数据结构:PAT甲级1132-Cut-Integer

35次阅读

共计 575 个字符,预计需要花费 2 分钟才能阅读完成。

题目粗心:

给定一个数字 Z,其位数为偶数,在其中间划开,后面的数字为 A,前面的数字为 B,如果 Z 能整除 A *B,输入 Yes, 否则输入 No。

算法思路:

看到宰割问题,首先想到的是字符串宰割,咱们采纳 string s 来承受输出的数字,而后将其前半部分宰割并转化为整数为 a,后半局部宰割并转化为整数为 B,并将 s 转化为整数 z, 如果 z%(a*b)==0,输入 Yes, 否则输入 No。

留神点:

  • 1、a 和 b,也就是除数有可能为 0,此时不能做取余运算,否则会最初 2 个测试点会呈现浮点谬误,间接特判输入 No,而后持续下一个循环即可。

提交后果:

AC 代码:

#include<cstdio>
#include<string>
#include<iostream>

using namespace std;

int main(){
    int N;
    scanf("%d",&N);
    for (int i = 0; i < N; ++i) {
        string s;
        cin>>s;
        int z = stoi(s);
        int a = stoi(s.substr(0,s.size()/2));
        int b = stoi(s.substr(s.size()/2));
        if(a==0||b==0){printf("No\n");
            continue;
        }
        if(z%(a*b)==0){printf("Yes\n");
        } else {printf("No\n");
        }
    }
    return 0;
}

正文完
 0