?? kmul.cpp
字號:
#include <fstream.h>
#include <math.h>
class CKuml
{
public:
CKuml();
virtual ~CKuml();
private:
ifstream m_InFile;
ofstream m_OutFile;
const char * m_InFileName;
const char * m_OutFileName;
protected:
double Divide_up(double I,int n,int k,double **recTab);
public:
void Begin_Kuml();
};
CKuml::CKuml():m_InFileName("input.txt"),m_OutFileName("output.txt")
{
m_InFile.open(m_InFileName,ios::in);
m_OutFile.open(m_OutFileName,ios::out);
}
CKuml::~CKuml()
{
m_OutFile.close();
}
///////////////////////////////////////////////////////////////////
inline double CKuml::Divide_up(double I,int n,int k,double **recTab)
{
double temp,rest,result;
double bestResult = 0;
//若被分割的段數為1,就直接返回
if(k == 1)
{
return I;
}
//若表中記錄不為-1,就返回該值
if(recTab[n-1][k-1] != -1)
{
return recTab[n-1][k-1];
}
for(int i=1;i<=n-k+1;i++)
{
temp = pow(10,n-i);
//取出余下的整數
rest = fmod(I,temp);
//求出余下整數的最大k-1乘積
result=(int)(I/temp) * Divide_up(rest,n-i,k-1,recTab);
if(result > bestResult)
{
bestResult = result;
}
}
recTab[n-1][k-1] = bestResult;//將k乘積寫入備忘錄
return bestResult;
}
void CKuml::Begin_Kuml()
{
double I,t;//I為要處理的數
int k,n;
m_InFile>>n;
m_InFile>>k;
m_InFile>>I;
if (n<=0||n>100)
{
m_OutFile<<"輸入的n的范圍不在1--100之內!";
return;
}
//生成動態二維數組
double** recTab = new double*[n];
for(int m=0;m<n;m++){
recTab[m] = new double[k];
}
for(int i=0;i<n;i++){
for(int j=0;j<k;j++){
recTab[i][j] = -1;
}
}
//進行處理
double resuIt = Divide_up(I,n,k,recTab);
m_OutFile<<(int)resuIt<<endl;
for(int p=0;p<n;p++)
{
delete[] recTab[p];
}
delete[] recTab;
recTab = 0;
return;
}
/////////////////////////////////////////////////////////////////////
void main()
{
CKuml kuml;
kuml.Begin_Kuml();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -