验证116725 = 116*725?C/C++

Ron*_*ing 0 c c++

问题:输入一个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!

  • +1.一个较短的证明:你正在寻找`A`和'B`正整数,使得'A*10 ^ k + B == A*B`,其中'10 ^ k> B`.这是不可能的,因为`A*10 ^ k + B> A*10 ^ k> A*B`. (3认同)

IPr*_*ory 7

对你的6位数字的一点提示:

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

请注意1000 == 10^3.

  • 您可以使用对数确定位数:`(int)floor(log((double)n)/ log(10.0)+ 1.0);` (2认同)

Mr *_*ter 6

编写一个要求输入的程序,然后打印"否".

完成.