【欧拉计划】4-6题

4.最大回文乘积
回文数就是从前往后读和从后往前读都一样的数。由两个2位数相乘得到的最大的回文数是9009=91×99。
求由两个3位数相乘得到的最大的回文数。
解题思路
1.两个for嵌套循环,两个三位数相乘得到的数判断是否为回文数,
2.判断该数为几位数,再转字符串,分为两部分,一部分反转判断是否和另一部分相同,题目求最大的回文数,定义个变量作为哨兵,得到更大的回文数就改变哨兵的值。

代码

#include <bitsdc++.h>
using namespace std;
long long ans=1;
int fun(int a)
{
    if(a<100000) //5
    {
        string b=to_string(a);
        string qian=b.substr(0,2);
        string hou=b.substr(3,2);
        reverse(qian.begin(),qian.end());
        if(qian==hou) return 1;
        else return 0;
    }
    else if(a>=100000&&a<1000000) //6
    {
        string b=to_string(a);
        string qian=b.substr(0,3);
        string hou=b.substr(3,3);
        reverse(qian.begin(),qian.end());
        if(qian==hou) return 1;
        else return 0;
    }
}
int main()
{
    long long a;
    for(int i=100;i<=999;i++)
    {
        for(int j=100;j<=999;j++)
        {
            a=i*j;
            if(fun(a)&&ans<a) ans=a;
        }
    }
    cout<<ans;
}

5.最小公倍数

2520是最小的能够被1到10整除的数。最小的能够被1到20整除的正数是多少?

解题思路
直接从2520开始遍历,如果满足能被1到20整除,就输出并结束,(缺点运行时间长可能超时

#include<bitsdc++.h>
using namespace std;
int fun(int i)
{
    for(int j=1;j<=20;j++)
    {
        if(i%j!=0) return 0;
    }
    return 1;
}
int main()
{
    for(int i=2520;;i++)
    {
        if(fun(i))
        {
            cout<<i;
            break;
        }
    }
}```

**6.平方的和与和的平方之差**

前十个自然数的平方的和是1*1+2*2+....+10*10=385,
前十个自然数的和的平方是(12+...+10)1+2+...+10= 55*55= 3025,
因此,前十个数的平方的和与和的平方之差是3025- 385 =2640。
求前一百个数的平方的和与和的平方之差。

**解题思路**
直接遍历1-100,分别求平方和与和的平方,相减求绝对值

代码
```cpp
#include<bitsdc++.h>
using namespace std;
int main()
{
    long long ans1=0,ans2=0;
    for(int i=1;i<=100;i++)
    {
        ans1+=i*i;
        ans2+=i;
    }
    long long ans3=ans2*ans2;
    if(ans1-ans3<0) cout<<ans3-ans1;
    else cout<<ans1-ans3;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值