问题:输入一个int编号ex: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**)
Run Code Online (Sandbox Code Playgroud)
问题是,你不能使用数组,跳转和按位来解决这个问题.是的,如果我们可以使用数组然后不多说,把输入数字放在一个数组中,检查前半部分乘以另一半.... bla..bla ...我需要帮助IDEA而不使用数组来解决这个问题,现在我被卡住了!非常感谢你的家伙!
Jon*_*oni 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!
对你的6位数字的一点提示:
% 1000 (int) X/1000.请注意1000 == 10^3.