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,
前十个自然数的和的平方是(1+2+...+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;
}