#include <math.h>
/*
左右どちらから読んでも同じ値になる数を回文数という。 2桁の数の積で表され
る回文数のうち、最大のものは 9009 = 91 × 99 である。
では、3桁の数の積で表される回文数のうち最大のものはいくらになるか。
*/
#define ORDER 6
#define NUM_MAX 1000
using namespace std;
int main(void)
{
int numProduct; //掛けた数
int odrProduct; //numProductのオーダー
int odrK; //オーダー変数
int pow[ORDER]; //各オーダーの値
bool flg; //検出フラグ
int temp; //切捨てのための仮数
int numMax = 0;
for ( int i = 0 ; i < NUM_MAX ; i++){
for( int j = 0 ; j < NUM_MAX ; j++ ){
//掛け算する
numProduct = i * j;//
//productのオーダーを知りたい
odrProduct = ceil(log10( (float)numProduct ));
//オーダー変数とフラグの初期化
odrK = 1;
flg = true;
for ( int k = 0 ; k < odrProduct ; k++ ){
//自分より上のオーダーは切り捨て
temp = numProduct % (odrK * 10);
//オーダーの値を確保
pow[k] = temp / odrK;
odrK *= 10;
}//next k
for ( int k = 0 ; k < odrProduct / 2 ; k++ ){
if(flg){
//回文判定
if( pow[k]== pow[odrProduct - k -1 ]){
flg = true;
}
else{
flg = false;
}
}
}//next k
if (flg){
cout <<"i:"<< i <<"\t j:"<< j <<"\t numProduct:" << numProduct<<"\n";
if ( numProduct > numMax ) numMax = numProduct;
}
}//next j
}//next i
cout <<"Max is \t" << numMax;
getchar();
return 0;
}