1132 Cut Integer (20 分)

本文介绍了一种算法,用于判断一个整数是否能被切割成两个子整数,且原整数能被这两个子整数的乘积整除。通过输入一系列整数,算法将输出Yes或No来表示该整数是否符合切割条件。

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 <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
#include <bits/stdc++.h>

using namespace std;

int main()
{
    int n;

    cin>>n;
    for(int i=0; i<n; i++)
    {
        string s;
        string s1;
        string s2;
        cin>>s;
        int len=s.length();
        for(int j=0; j<len/2; j++)
        {
            s1.push_back(s[j]);
        }
        for(int j=len/2; j<len; j++)
        {
            s2.push_back(s[j]);
        }
        int num=0;
        int num1=0;
        int num2=0;
        for(int j=0; j<s.length(); j++)
            num=num*10+s[j]-'0';
        for(int j=0; j<s1.length(); j++)
            num1=num1*10+s1[j]-'0';
        for(int j=0; j<s2.length(); j++)
            num2=num2*10+s2[j]-'0';
        if(num1*num2!=0&&num%(num1*num2)==0)
            printf("Yes\n");
        else printf("No\n");


    }
    return 0;
}

 

### 电路板切割或开孔相关的信息 在PCB设计中,切割或开孔操作通常用于创建不规则形状的板边或移除特定区域的材料。这些操作可以通过不同的工具和方法实现,具体取决于设计软件的功能和需求。 #### **Board Cutout** 在PCB设计中,`Board Cutout`用于在电路板上创建不规则形状的切割区域。这种功能通常用于移除特定区域的铜层或其他材料,以满足机械或电气设计的需求。例如,在需要透光的区域,可以使用`Board Cutout`来移除该区域的敷铜层,确保该区域没有任何铜皮或内电层通过。具体操作是先在`Keepout`层绘制一个矩形框,以阻隔上下两个敷铜层通过;然后使用`Place -> Polygon Pour Cutout`命令别在每一个内电层上切除一个矩形框区域,这些区域需要完全重叠,用于透光[^3]。 #### **Copper Cutout** 与`Board Cutout`不同,`Copper Cutout`通常用于移除特定区域的铜皮。在多层设计中,如果需要在某一层上移除特定区域的铜皮,可以使用`Polygon Pour Cutout`命令。这种方法允许用户在每一层上切除特定形状的区域,并确保这些区域不会被覆铜。例如,在需要透光的区域,可以使用`Polygon Pour Cutout`命令别在每一层上切除一个矩形框区域,以确保该区域没有铜皮通过[^3]。 #### **工具和方法** 在Altium Designer中,`Board Cutout`和`Polygon Pour Cutout`是实现切割和开孔的主要工具。`Board Cutout`可以在任意层上使用,而`Polygon Pour Cutout`通常用于移除特定区域的铜皮。对于需要复杂形状的切割,可以通过手动绘制不规则的二维图形来实现,或者将一维的线属性转化为二维的图形属性。 #### **脚本实现** 在某些情况下,可以通过编写脚本来实现复杂的切割操作。例如,使用Pascal编写的脚本可以创建特定形状的铜皮区域,并通过动态更新来适应布线变化。以下是一个示例脚本,演示如何在Altium Designer中手动绘制一个矩形铜皮区域: ```pascal procedure CreateCopperArea; var PCBDoc: IPCB_Document; Copper: IPCB_Copper; Points: array[0..3] of TPoint; i: Integer; begin PCBDoc := PCBServer.GetCurrentPCBBoard; if PCBDoc = nil then Exit; // 定义四个顶点构成矩形 Points[0] := MakePoint(10000, 10000); Points[1] := MakePoint(20000, 10000); Points[2] := MakePoint(20000, 20000); Points[3] := MakePoint(10000, 20000); Copper := PCBServer.PCBObjectFactory(eCopperObject, eNoDimension, eCreate_Default); Copper.Layer := eTopLayer; Copper.Net := PCBDoc.Board.Nets.Item('GND'); // 设置网络为 GND for i := 0 to 3 do Copper.AddPoint(Points[i]); Copper.Closed := True; PCBDoc.Board.AddPCBObject(Copper); end; ``` 上述脚本创建了一个连接到GND网络的铜皮区域,适用于顶层(Top Layer),可作为地平面使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值