兩道java基礎題

題目:
    輸入一整數,找出大於該整數的最小完美數,找到返回該數,找不到返回0。
    完美數:一個數如果恰好除與各位書的和餘22,這個數就成爲“完美數”。

 

   審題 再看一遍,整數應該包括負數,0,正整數,如果理所當然的考慮爲正整數,即使邏輯對,測試用例也過不了。並且再沒有任何測試用例提示的情況下,不考慮周全就會有問題。

 

import java.util.Scanner;


public class Main {
	
	public static void main(String[] args){
		Scanner scan=new Scanner(System.in);
		int a;
		while(scan.hasNext()){
			a=scan.nextInt();
			PerfectNum test=new PerfectNum(a);
			System.out.println(test.getMinPerf());
		}
		//推測 測試用例的四個數據
		//0  結果0
		//100 結果698
		//2147483647 結果0
		//-2147483648 結果-2147483611
	}
}

class PerfectNum{
	
	private int num;
	
	public PerfectNum(int num){
		this.num=num;
	}
	
	private int getSub(int num){
		String strNum=String.valueOf(Math.abs(num));
		if(this.num==Integer.MIN_VALUE){      //最小負數去掉-
			strNum=strNum.substring(1);
		}
		int sum=0;
		for(int i=0;i<strNum.length();i++){
			String temp=strNum.substring(i,i+1);
			sum+=Integer.parseInt(temp);
		}
		return sum;
	}
	
	public int getMinPerf(){
		if(checkNumIsZero(this.num)){
			return 0;
		}
		while(isPerfect(this.num)!=1){
			if(this.num==Integer.MAX_VALUE){  //超過整數返回0
				return 0;
			}
			this.num++;
		}
		return this.num;
	}
	
	private int isPerfect(int num){
		if(checkNumIsZero(this.num)){
			return 0;
		}
		int sub=this.getSub(num);
		int remain=num%sub;
		if(remain==22||remain==-22){         //正數和負數情況
			return 1;
		}
        return 0;		
	}
	
	private boolean checkNumIsZero(int num){
		if(num==0){
			return true;
		}
	    return false;
	}
	
}


題目2:

 

求複數的四則運算,輸入整數,低16位放虛部,高16放實部。

【2016-02-18 重寫】

     
final class ComplexOperate{
      
	  public static String add(Complex complexA,Complex complexB){
          int a = complexA.getReal();
          int ai = complexA.getImaginary();
          int b = complexB.getReal();
          int bi = complexB.getImaginary();
          int real = a+b;
          int img = ai+bi;
          
          return toForm(real,img);
      }
		 
      public static String reduce(Complex complexA,Complex complexB){
    	    int a = complexA.getReal();
            int ai = complexA.getImaginary();
            int b = complexB.getReal();
            int bi = complexB.getImaginary();
  	      
            int real = a-b;
            int img = ai-bi;
            
            return toForm(real,img);
	  }
       
	  public static String multi(Complex complexA,Complex complexB){
	 	    int a = complexA.getReal();
            int ai = complexA.getImaginary();
            int b = complexB.getReal();
            int bi = complexB.getImaginary();
  	      
            int real = a*b-ai*bi;
            int img = a*bi+b*ai;
            
            return toForm(real,img);
	  }
		 
	  public static String divise(Complex complexA,Complex complexB){
		    int a = complexA.getReal();
            int ai = complexA.getImaginary();
            int b = complexB.getReal();
            int bi = complexB.getImaginary();
  	     
            int real = (a*b+ai*bi)/(b^2+bi^2);
            int img = (b*ai-a*bi)/(b^2+bi^2);
            
            return toForm(real,img);
	  }
	  
	  /**
	   * 是否共軛
	   * @param complexA
	   * @return
	   */
	  public static boolean isConjugate(Complex complexA,Complex complexB){
		  int a = complexA.getReal();
          int ai = complexA.getImaginary();
          int b = complexB.getReal();
          int bi = complexB.getImaginary();
            
		  return (a==b)&&(ai+bi==0);
	  }
	  
	 
	  private static String toForm(int real,int img){
		  if(img<0){
			  return real+""+img+"i";
		  }
		  
		  if(img ==0){
			  return real+"";
		  }
		  return real+"+"+img+"i";
	  }
	 
}
    	 
     

class Complex {

	private int real; //實部

	private int imaginary; //虛部

	public Complex(int real, int img) {
		this.real = real;
		this.imaginary = img;
	}

	//輸入任意整數,高16位爲實部,低16位爲虛部
	public Complex(int num) {
		this.real = (num >> 16) & 0xFFFF;
		this.imaginary = num & 0xFFFF;
	}

	public int getReal() {
		return real;
	}

	public void setReal(int real) {
		this.real = real;
	}

	public int getImaginary() {
		return imaginary;
	}

	public void setImaginary(int imaginary) {
		this.imaginary = imaginary;
	}
}
	






 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章