作业帮 > 综合 > 作业

设X、Y、Z分别代表三进制下的一位数字,若等式X Y+ZX=XYZ在三进制下成立,那么同样在三进制下,等式X Y*ZX

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/08/23 12:34:52
设X、Y、Z分别代表三进制下的一位数字,若等式X Y+ZX=XYZ在三进制下成立,那么同样在三进制下,等式X Y*ZX
public class Test0412 {
/**
* 设X、Y、Z分别代表三进制下的一位数字,若等式X Y+ZX=XYZ在三进制下成立,那么同样在三进制下,等式X Y*ZX
* 找到将3进制转换为10进制的方法:
* 举例1,(100)3 = 0*3^0 + 0*3^1 +1*3^2 = 0+0+9 = (9)10
* 举例2,(022)3 = 2*3^0 + 2*3^1 +0*3^2 = 2+6+0 = (8)10
* 将10进制转3进制的方法:
* 举例1,(9)10 = (100)3
* 9/3 = 3……0 (0)个位
* 3/3 = 1……0 (0)十位
* 1/3 = 0……1 (1)
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ClassForTest0412 cl = new ClassForTest0412(); // 实例对象(需要调用这个类中的方法,这个类写在下面啦.)
//声明变量
int xy; //加数
int zx; //加数
int xyz; //和
int x,y,z; //三进制数
int product10; //积(10进制)
int product3; //积(3进制)
boolean isBreak; //循环条件
//循环判断
isBreak = false; //初始为否
for (x = 0; x < 3 ; x++){ //第1循环
for (y = 0;y < 3 ; y++ ){ //第2循环
for (z= 0; z < 3 ; z++){ //第3循环
//调用方法求出值(10进制的)
xy = y*cl.Power(0)+x*cl.Power(1);
zx = x*cl.Power(0)+z*cl.Power(1);
xyz = z*cl.Power(0)+y*cl.Power(1)+x*cl.Power(2);
//以下6句不必写在程序里,我用来手算答案的.
System.out.println("\n x:"+x); //1
System.out.println("y:"+y); //2
System.out.println("z:"+z); //3
System.out.println("xy:"+xy); //4
System.out.println("zx:"+zx); //5
System.out.println("xyz"+xyz); //6
//判断
if (xyz == xy+zx && x != y && x != z && y !=z ){ //符合
product10 = xy * zx; //计算积(10进制)
//以下6句不必写在程序里,我用来手算答案的.
System.out.println("x:"+x); //1
System.out.println("y:"+y); //2
System.out.println("z:"+z); //3
System.out.println("xy:"+xy); //4
System.out.println("zx:"+zx); //5
System.out.println("xyz"+xyz); //6
//调用方法得出3进制的积
product3 = cl.GetThreeNotation(product10);
//调用方法进行拆位
int length =(product3+"").length();
int oneOfProduct [] = cl.GetArray(product3,length);
//对拆位后的三进制积判断,并输出
System.out.print("设X、Y、Z分别代表三进制下的一位数字,若等式X Y+ZX=XYZ在三进制下成立,那么同样在三进制下,等式X Y*ZX =");
for (int i = length -1 ; i >= 0; i--){
if (oneOfProduct [i] == x ){
System.out.print("X");
}else if (oneOfProduct [i] == y){
System.out.print("Y");
}else{
System.out.print("Z");
}
}
isBreak = true;
break; //跳出第3循环
}
}
if (isBreak == true){
break; //跳出第2循环
}
}
if (isBreak == true){
break; //跳出第1循环 PS.总觉得这跳出循环的方法有点傻,有没有其他的做法?
}
}
}
}
//这个就是上面调用的类
public class ClassForTest0412 {
/**
* 10进制转3进制的方法
* PS:
* 我想过将这个方法返回为数组,省得等下又要拆位,不过,我MS找不出数组的长度呃.
* 先找出长度再返回,就更麻烦了.因为找长度的时候,等于就已经求出3进制数了呃
* 应该有更好的方法的,不过我没想到而已,或者,我还没学到 - -|我是初学者.
* @param num
* @return
*/
public int GetThreeNotation(int product10){
int result = 0; //结果
int i = 1; //位数
for (;product10 > 0; ){
result += product10 % 3 * i; //取余
product10 = product10 / 3; //去余
i *= 10; //根据循环次数判断位数
}
return result;
}
/**
* 将三进制的积拆位,存入数组
* @param product3
* @param length
* @return
*/
public int [] GetArray(int product3,int length){
int [] oneOfProduct = new int [length];
for (int i = 0; i