題目
一個整數“犯二的程度”定義為該數字中包含2的個數與其位數的比值。如果這個數是負數,則程度增加0.5倍;如果還是個偶數,則再增加1倍。例如數字“-13142223336”是個11位數,其中有3個2,并且是負數,也是偶數,則它的犯二程度計算為:3/11*1.5*2*100%,約為81.82%。本題就請你計算一個給定整數到底有多二。
輸入格式:
輸入第一行給出一個不超過50位的整數N。
輸出格式:
在一行中輸出N犯二的程度,保留小數點後兩位。
輸入樣例:
-13142223336
輸出樣例:
81.82%
思路:
這道題我按題目做出來有一個測試點錯誤。最後才發現還少一個當是正偶數的時候,也應該乘以2.
代碼:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
int count = 0;
double q = 0;
for ( int i = 0 ; i < s.length(); i++) {
if (s.charAt(i) == '2') {
count++;
}
}
if (s.charAt(0) == '-') {
q = (double) count / (s.length() - 1) * 1.5;
if (s.charAt(s.length() -1) % 2 == 0) {
q = (double) count / (s.length() - 1) * 1.5 * 2.0;
}
} else if(s.charAt(0) != '-'&&s.charAt(s.length() -1) % 2 == 0){
q = (double) count / s.length()*2.0;
}else if(s.charAt(0) != '-'&&s.charAt(s.length() -1) % 2 != 0){
q = (double) count / s.length();
}
System.out.printf("%.2f%%", q * 100);
}
}
簡單代碼:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
int count = 0,amount = s.length();
double q = 0,a = 1, b = 1;
for ( int i = 0 ; i < s.length(); i++) {
if (s.charAt(i) == '2') {
count++;
}
}
if (s.charAt(0) == '-') {
a = a * 1.5;
amount -= 1;
}
if ((s.charAt(s.length() -1)-'0') % 2 == 0) {
b = b * 2.0;
}
q = (double) count / amount *a *b * 100;
System.out.printf("%.2f%%", q );
}
}