欧拉计划第4题答案&代码&注释

欸嘿,又是我,今天学校里事有点多,就只写一道题的博客。

欧拉计划04

题目如下:

        首先我们需要知道什么是回文数,题目上说回文数就是从前往后读和从后往前读都一样的数字,那么我们简化一下,就是逆序之后和原值相等的数字。求2个3位数相乘的乘积并不困难,暴力一点的for循环遍历就可以,但是要判断这个乘积是否为回文数,我们就要写出一个判断回文数的算法。

        我们先用 1001 这个数字来举例吧,如何把这个数字逆序过来呢?

对于我们人来说,把一个不大的数字倒过来是几乎瞬间完成的事,所以我们要放慢自己大脑思考

的过程,把自己想象成一台计算机,一点一点的往前思考。

1001 要逆序的话 当然是要从后往前看,我们先把个位上的 1 取出来 然后再把十位上的 0 取出来

再取百位上的0 最后再取千位上的1 然后按先后顺序一 一组装起来。

假设当我们取走了一个 1 ,1001就会变成100,然后再取走0 , 这样就变成了每次都取最低位。

我们可以让 一个变量 存储你要逆序的数字,并对它不断除以10 取余数 就能够取出每一位。

int num;
int a;
scanf("%d", &num);
//只要一直循环下面的代码就可以不断取出最低位
a = num % 10;
num /= 10;
//当num只剩个位时 num / 10 = 0 所以循环条件为 num!=0

既然把 每一位都取出来了 那么我们怎么组装呢?

从最1001 中 已经取出来了最低位的1 那么我们只需要用一个变量把它装起来

让我们取出0之后 把1进一位然后个位再加上0 。 取出第二个0 再把10一起进位 再把第二个0

加到个位上去。 取出最高位的1时 再把100一起进位 把1加上去。 那么我们就把数字倒过来了。

int num = 1001;
int a, num_RVS = 0;
//给存储逆序数的变量 num_RVS初始化为0
a = num%10;
num /= 10;
num_RVS = num_RVS*10 + a;
//把它*10就可以进位 然后个位留出来加上a
//这个过程一直循环即可。

逆序后的数字拿到手后,我们只需要判断它是否为回文数并找出三位数相乘最大的那个回文数即可

#include <stdio.h>

int RVSnum(int num); //逆序函数声明

int main(void)
{
    int num, max = 0;  //num存储两个三位数相乘的积  max存储最大回文数  max初始化为0
    int i,j;  //i和j分别表示2个三位数

    for (i=100; i<1000; i++)  //for循环嵌套遍历三位数相乘
    {
        for (j=100; j<1000; j++)
        {
            num = i*j;
            if ( RVSnum(num) == num )  //调用逆序函数 并将逆序后的数字和原数字比较
                if (max<num)          //如果num为回文数 则和max比较 存储大值到max中
                    max = num;
        }
    }
    printf("%d", max);   //打印max
}

int RVSnum(int num)   //逆序函数
{
    int RVS=0;  //存放逆序后的数字
    int a;  //存放每一次取的最低位
    while (num!=0)  //逆序
    {
        a = num%10;
        num /= 10;
        RVS = RVS*10 + a;
    }
    return RVS;  //将逆序后的数字作为函数返回值
}

答案:906609

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值