1:輸入兩個正整數m和n,求其最大公約數和最小公倍數。
public class text {
public static void main(String args[]){
gcdlcm a =new gcdlcm();
System.out.println("兩數的最大公約數是:"+a.gcd(10, 16));
System.out.println("兩數的最小公倍數是:"+a.lcm(16, 10));
}
}
class gcdlcm{
int gcd(int m,int n){
if(m<n){ //這個判斷是爲了將大數放在前面
int temp=n;
n=m;
m=temp;
}
if(m%n==0){
return n;
}
else{
m%=n;
return gcd(m,n);
//這裡也可以寫成gcd(n,m),就省掉了前面的判斷了,會快一點
}
}
int lcm(int m,int n){
int i=1;
if(m<n){ //這個判斷是爲了將大數放在前面
int temp=n;
n=m;
m=temp;
}
int lcm=m;
while(lcm%n!=0){
lcm=m*i;
i++;
}
return lcm;
}
}
2 輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。
public class test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int abcCount=0;//英文字母個數
int spaceCount=0;//空格鍵個數
int numCount=0;//數字個數
int otherCount=0;//其他字符個數
Scanner scan=new Scanner(System.in);
String str=scan.nextLine();
char[] ch = str.toCharArray();
for(int i=0;i<ch.length;i++){
if(Character.isLetter(ch[i])){
//判斷是否字母
abcCount++;
}
else if(Character.isDigit(ch[i])){
//判斷是否數字
numCount++;
}
else if(Character.isSpaceChar(ch[i])){
//判斷是否空格鍵
spaceCount++;
}
else{
//以上都不是則認爲是其他字符
otherCount++;
}
}
System.out.println("字母個數:"+abcCount);
System.out.println("數字個數:"+numCount);
System.out.println("空格個數:"+spaceCount);
System.out.println("其他字符個數:"+otherCount);
}
}
3 題目:將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。 (1)如果這個質數恰等於n,則說明分解質因數的過程已經結束,打印出即可。
(2)如果n<>k,但n能被k整除,則應打印出k的值,並用n除以k的商,作爲新的正整數你n,重複執行第一步。
(3)如果n不能被k整除,則用k+1作爲k的值,重複執行第一步。
public class test3{
public static void main(String[] args){
int x;
Scanner in = new Scanner(System.in);//定義從鍵盤輸入
System.out.print("請輸入一個正整數:");//提示
x = in.nextInt(); //將從鍵盤輸入的數賦值給x
new PrimeSplit(x); //匿名初始化一個對象,還有參數的構造函數
}
}
class PrimeSplit{
int k = 2; //將最小的質數賦值給k
public PrimeSplit(int x){ //小於等於1的數不可以分解
if(x<=1){
System.out.println(x+"是無效的被分解數");
}
else if(x==2){
System.out.println(x+"分解後的質因數爲: 1*"+x); //如果輸入的是最小質數2,
}else {
System.out.print(x+"分解後的質因數爲: 1"); //1是所有的正整數的質數
while(k<=x){ //輸入的數可以被k整除
if(x%k==0){
System.out.print("*"+k); //將k添加到結果中
x = x/k;//除以最小質數後重新循環
}
else{
k++;
}
}
}
}
}