0

问题:输入一个整数例如:ABCD,验证是不是ABCD = AB*CD

(注意我们不知道这个数字有多少位数,只知道它是一个正整数

是的,如果位数是奇数,我们可以断定结果为否,立即通过...眼睛大声笑)

例如:

    Enter a number: 88
    Output: No

    Enter a number: 12600
    Output: No

    Enter a number: 116725
    Output: Yes, 116 * 725 = 116725 (**this is just example, 

not actual result, just help to understand how output look like**)

问题是,你不能使用arrayjumpbitwise来解决这个问题。是的,如果我们可以使用数组,那就没什么好说的了,把输入数放在一个数组中,检查前半部分乘另一半......bla..bla......我需要IDEA的帮助而不使用数组来解决这个问题,现在我被困住了!非常感谢你!

4

7 回答 7

16

您的程序可以安全地输出No每个输入。证明:

您正在寻找整数 A 和 B,使得 A*B = A*10^k + B,其中 A 和 B > 0 且 B < 10^k。

如果 A*B = A*10^k + B,则 B = 10^k + B/A > 10^k。但是 B 必须小于 10^k,所以这是矛盾的。因此不存在这样的A和B。


更长的证明:

您正在寻找整数 A 和 B,使得 A*B = A*10^k + B,其中 A 和 B > 0 且 B < 10^k。

两边减去B得到(A-1)*B = A*10^k。

由于 A 是右手边的一个因数,它也是左手边的一个因数。但是 A 和 A-1 互质,所以 A 必须整除 B。所以,对于某个整数 n,B = n*A。

现在我们有 A*B = A*10^k + n*A,或 A*B = (10^k + n)*A。由于 A > 0,我们可以将两边除以 A 得到 B = 10^k+n。但这是不可能的,因为 B 应该小于 10^k!

于 2012-05-08T08:32:48.987 回答
7

对您的 6 位数号码的一点提示:

  • 获得最后 3 位数字使用% 1000
  • 要获得前 3 位数字,请使用(int) X/1000.

请注意1000 == 10^3.

于 2012-05-08T07:31:26.940 回答
6

编写一个程序,要求输入,然后打印“否”。

完毕。

于 2012-05-08T08:32:37.627 回答
2

目前还不清楚您要做什么。ABCD == AB*CD 建议四位数字。对于一个四位数的数字x,上面的测试将是x == (x / 100) * (x % 100)。对于六位数字,请替换 1001000,更一般地,对于偶数的n数字 n,请使用10^(n/2)。但是,如果n很奇怪,我不确定您在寻找什么,并且您给出的最后一个示例不符合您提到的标准;如果您可以排列每一半的数字,那么问题就会变得更加复杂。

于 2012-05-08T07:50:09.193 回答
1

您可以读取一个字符串,将其在中间拆分并将两个部分都转换为 int。

您还可以读取一个 int,计算位数(编写自己的循环或使用 log 函数)并在计算出的位数后拆分 int。

您还可以编写一个循环,该循环采用 int ABCD,将其拆分为 ABC 和 D,并将数字从 ABC 移动到 D,而两者的位数不同(您不需要在这里计算位数,您可以进行非常简单的比较)。

于 2012-05-08T07:40:18.533 回答
1

要获得位数,请计算您必须将数字除以 10 的次数,直到它小于 1。

对于 116725,您需要除以 10 六次。之后,如果数字是奇数,您可以打印 no 或像 James Kanze 和 ProblemFactory 描述的那样计算结果。

于 2012-05-08T08:02:53.633 回答
1

这是一个完整的“C/C++”解决方案:

#include <stdio.h>

int main(void) {
    while (fgetc(stdin) != '\n');
    return puts("No.");
}
于 2012-05-08T12:13:19.503 回答