📄 chuangxin.cpp
字号:
/*
2. 把满足条件进行扩展,例如求一个5位的16进制数,
它的平方是个10位的16进制数,恰好包括0x1到0xF这
15个数字。此问题的一般性描述为:对于一个3N+1进
制数来说,有一个N位的3N+1进制数和它的平方(一个
2N位的3N+1进制数),由1到3N组成。
*/
#include <iostream.h>
#include <math.h>
bool isHaveSame(int num,int JinZhi)
{
int *aa=new int[(JinZhi-1)/3];
int i=0,j;
while(num)
{
aa[i++]=num%JinZhi;
num/=JinZhi;
}
for(i=0;i<(JinZhi-1)/3;i++)
{
for(j=i+1;j<(JinZhi-1)/3;j++)
{
if(!aa[i]||aa[i]==aa[j])
{
return true;
}
}
}
return false;
}
bool isWei(int num,int JinZhi)
{
if(num>pow(JinZhi,2*(JinZhi-1)/3-1) && num<pow(JinZhi,2*(JinZhi-1)/3))
{
return true;
}
return false;
}
bool isHaveSame(int num1,int num2,int JinZhi)
{
int *aa=new int[JinZhi];
int x,i=0;
x=num1;
while(x)//将num1从低位到高位依次存到aa[]数组中
{
aa[i++]=x%JinZhi;
x/=JinZhi;
}
x=num2;
while(x)//将num2从低位到高位依次存到aa[]数组中
{
aa[i++]=x%JinZhi;
x/=JinZhi;
}
for(i=0;i<JinZhi;i++)
{
for(int j=i+1;j<JinZhi;j++)
{
if(!aa[i]||aa[i]==aa[j])
{
return true;
}
}
}
return false;
}
void Show(int num1,int num2,int JinZhi)
{
int *aa=new int[JinZhi];
int x,iCount=0,i;
x=num1;
while(x)//将num1从低位到高位依次存到aa[]数组中
{
aa[iCount++]=x%JinZhi;
x/=JinZhi;
}
char ch;
for(i=iCount-1;i>=0;i--)
{
if(aa[i]<=9)
{
cout<<aa[i];
}
else
{
ch=aa[i]-10+'A';
cout<<ch;
}
}
cout<<"\'s square is ";
iCount=0;
x=num2;
while(x)//将num2从低位到高位依次存到aa[]数组中
{
aa[iCount++]=x%JinZhi;
x/=JinZhi;
}
for(i=iCount-1;i>=0;i--)
{
if(aa[i]<=9)
{
cout<<aa[i];
}
else
{
ch=aa[i]-10+'A';
cout<<ch;
}
}
cout<<endl;
}
void main()
{
bool isHaveSame(int,int);
bool isHaveSame(int,int,int);
bool isWei(int ,int );
void Show(int,int,int);
int JinZhi=10;
cout<<"输入进制数"<<endl;
cin>>JinZhi;
int square=0;
for(int i=pow(JinZhi,(JinZhi-1)/3-1);i<pow(JinZhi,(JinZhi-1)/3);i++)
{
if(isHaveSame(i,JinZhi))
{
i++;
continue;
}
square=i*i;
if(!isWei(square,JinZhi))
{
i++;
continue;
}
if(!isHaveSame(i,square,JinZhi))
{
Show(i,square,JinZhi);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -