1부터 10,000까지 8이라는 숫자가 총 몇번 나오는가?
8이 포함되어 있는 숫자의 갯수를 카운팅 하는 것이 아니라 8이라는 숫자를 모두 카운팅 해야 한다.
(※(注記) 예를들어 8808은 3, 8888은 4로 카운팅 해야 함)
JAVA
public class CountingEight {
public static void main(String[] args) {
for (int i=0; i<=10000; i++){
searchEight(i);
}
System.out.println("1에서 10,000 사이에 존재하는 8의 개수는? "+count);
}
private static int count = 0;
public static void searchEight(int num){
if (num%10==8) count++;
if (num>10) searchEight(num/10);
}
}
1에서 10,000 사이에 존재하는 8의 개수는? 4000
파이썬은 한줄로 가능하군요!!! @_@ 제 능력으로는 이렇게 밖에.... 하아~~
int count = 0;
for(int i = 1; i < 10001; i++)
{
for(int j = i; j > 0; j /= 10)
{
if(j % 10 == 8)
{
count++;
}
}
}
Java로 풀어보았습니다.
각 자리수에 대해 8인지 검사하고 8이면 cnt값을 하나씩 증가시켜서 8의 개수를 구하는 코드입니다.
class Count8 {
public static void main(String[] args) {
int cnt = 0;
for(int i = 1; i < 10000; i++ ) {
if( i % 10 == 8 ) cnt++;
if( (i / 10) % 10 == 8 ) cnt++;
if( (i / 100) % 10 == 8 ) cnt++;
if( (i / 1000) % 10 == 8 ) cnt++;
}
System.out.println("result : " + cnt);
}
}
2014年08月15日 10:13
import java.util.stream.IntStream;
public static void main(String[] args) {
System.out.println(String.format(">> %d", foo()));
}
public static long foo(){
//return IntStream.range(1, 10000).map(x -> String.valueOf(x).replaceAll("[0-79]", "").length()).sum();
return IntStream.rangeClosed(1, max)
.map(x -> (int)(String.valueOf(x).chars().filter(ch -> ch == '8').count()))
.sum();
}
java 8 버전입니다.
2014年07月30日 18:33
String temp = "";
int count = 0;
for(int i = 1; i < 10001; i++)
{
temp = temp.concat(String.valueOf(i));
}
for(int j = 0; j < temp.length(); j++)
{
if(temp.charAt(j) == '8')
{
count++;
}
}
// java
// n = 10, 100, 1000 ...
// System.out.println(google(10000));
public static int google(int n) {
return n==0 ? 0 : 10 * google(n/10) + n/10;
}
2014年08月27日 16:40
문자열로 한자리씩 끊어 처리하는 방법이랑 각 자리수로 계산 하는 방식 2가지로 해봤습니다. JAVA 코드입니다~
package my_test;
public class T {
public static void main(String[] args) {
int su=10000;
System.out.println("자리수 계산 방식:"+eight_num(su));
System.out.println("문자열 계산 방식:"+eight_str(su));
}
/**
* 자리수 계산 방식
*/
public static int eight_num(int num){
int result=0;
for(int i=0;i<=num;i++){
for(int j=i;0<j;){
if(j%10==8){
result++;
}
j/=10;
}
}
return result;
}
/**
* 문자열 계산 방식
*/
public static int eight_str(int num){
int result=0;
for(int i=1;i<=num;i++){
String temp= String.valueOf(i);
for(int j=0;j<temp.length();j++){
if('8' == temp.charAt(j)){
result++;
}
}
}
return result;
}
}
성능을 위해 StringBuilder를 사용했습니다
public class Main {
public static void main(String[] ar){
int cnt = 0;
StringBuilder s = new StringBuilder();
for(int i = 1; i <= 10000; i++){
s.append(i);
}
for(int i = 0; i < s.length(); i++){
if(s.charAt(i) == '8')
cnt++;
}
System.out.println(cnt);
}
}
2014年09月30日 23:17
package Coding;
public class coding2 {
public static void main(String args[]){
int ard=0; // 나누어줄 값
int res=0; // 계산의 결과
int cor=0; // 결과값, 갯수
int incr=88; // 구해야할 값의 한계
for(int j=0;j<=incr;j++){
ard = j;
for(int i=0; i<=ard;i++){
res = ard % 10;
ard /= 10;
if(res == 8){
++cor;
}
res = 0;
}
System.out.println(cor);
}
}
}
풀이 작성