本帖最后由 joker11111 于 2016-11-21 13:23 编辑 //-------------------------------------------
//04--找出最大的由3位数构成的回文数
//一个回文数是指从左读或者从右读都是一样的数
//如9009 = 91 * 99 为最大的由两位数乘积构成的回文数
//-------------------------------------------
#include <windows.h>
#include <iostream>
#include <time.h>
#include <math.h>
using namespace std;
long int PalNum(int& m);
bool JuPalNum(long int& m);
int main()
{
clock_t start, finish;
double totaltime;
start = clock();
int m = 3;
cout << "最大的由" << m << "位数乘积构成的回文数为:" << PalNum(m) << endl;
finish = clock();
totaltime = (double)(finish - start) / CLOCKS_PER_SEC;
cout << "此程序的运行时间为" << totaltime << endl;
system("pause");
return 0;
}
/**********************************
功能:返回最大的由m位数乘积构成的回文数
***********************************/
long int PalNum(int& m)
{
int p, q, p1, q1;
long int s,max_s = 0;
for (p = pow(10, m - 1); p < pow(10, m); p++)
{
for (q = pow(10, m - 1); q < pow(10, m); q++)
{
s = p * q;
if (JuPalNum(s) && s > max_s)
{
max_s = s;
p1 = p;
q1 = q;
}
}
}
cout << p1 << "*" << q1 << "=" << max_s << endl;
return max_s;
}
/**********************************
功能:判断这个数是否为回文数
***********************************/
bool JuPalNum(long int& m)
{
int l = 0; //l为传入m的位数
long int n = 0, p = m, q;
while (p)
{
p /= 10;
l++;
}
p = m;
while (l)
{
q = p%10;
p /= 10;
n += q * pow(10,l-1);
l--;
}
if (n == m)
return true;
else
return false;
}
913*993 = 906609
|