題目:
輸入一整數,找出大於該整數的最小完美數,找到返回該數,找不到返回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;
}
}