(转)一个五位数字ABCDE*4=EDCBA

转自:http://kinghuimail.blog.163.com/blog/static/958204082010102784413898/


一道面试题:一个五位数字ABCDE*4=EDCBA,这五个数字不重复,请编程求出来(转)  

2010-11-27 20:44:13|  分类: 学习笔记|字号 订阅

一个五位数字ABCDE*4=EDCBA,这五个数字不重复,请编程求出来.

先给一个网友的纯的推理过程:

ABCDE*4=EDCBA

很显然,A不是1,就是2,为0就不是五位数,为> 2则乘积不会是五位数
因为4*E的个位数是A,则A=2

所以题目变成2BCDE*4=EDCB2

显然,E是8(原因,乘以4个位为2的只有3,8,而根据高位2*4> =8,它只能为8
所以变成2BCD8   *   4   =   8DCB2
既然BCD8*4没有进位,因此B只能是0,1,2

假设B=0,则CD8*4=DC02,   4*D的尾数必须为7,这肯定不可能
假设B=1,则1CD8*4   =   DC12,4*D的个位数为8,D必然=7,因为1*4> 2
        1C78*4=7C12   C*4   =   30+C-3,   C=9,满足
假设B=2,则2CD8   *   4=   DC22,   D=8或者9,根据C等于4*D+3的个位,可以得出C等于5或者9
所以等式必须为2588   *4   或者2998*4,很显然都不满足

所以只能是(A,b,C,d,e)=(2,1,9,7,8) 

下面给出一个遍历的C语言解法:

#include <stdio.h>

int calc ()

{
    for (int i=10001; i<100000; i++)
    {
        int right = 0;
        int left = i;
        while ( left != 0 ) /*求右边的值*/
        {
            right = right * 10 + left % 10; 
            left /= 10;
        }
        
        if ( (<< 2) == right ) 
        {
            return i;
        }
    }

    return -1;
}

void main(void)
{
    printf("the result is : %d\n", calc());
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值