10~1000까지 각 숫자 분해하여 곱하기의 전체 합 구하기

예로, 10~15까지의 각 숫자 분해하여 곱하기의 전체 합은 다음과 같다.

10 = 1 * 0 = 0
11 = 1 * 1 = 1
12 = 1 * 2 = 2
13 = 1 * 3 = 3
14 = 1 * 4 = 4
15 = 1 * 5 = 5

그러므로, 이 경우의 답은 0+1+2+3+4+5 = 15

구현
+1 1에서 9까지는 어떻게 표현하나요? 1 = 1 * ? = ? 2 = 2 * ? = ? - 디디, 2016/04/09 09:23 M D
+1 10부터 시작하는 것으로 바꾸었습니다. - hana11, 2016/04/09 10:11 M D
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

160개의 풀이가 있습니다. 1 / 16 Page

파이썬 3.5.1

print(sum(eval('*'.join(str(x))) for x in range(10,1001)))

C++

#include <iostream>
using namespace std;

int main(){
  int result;
  for(int x=0;x<=990;x++){
    string st = to_string(x+10);
    int temp = 1;
    for(int y=0; y<st.length(); y++){
        temp *= st.at(y) - '0';
    }
    result += temp;
  }
  cout << result;
    return 0;
}

자바

public class MyClass {
    public static void main(String[] args){
        String[] list = new String[991];
        int result = 0;
        for(int x = 10; x < 1001; x++){
            list[x-10] = ""+x;
        }
        for(String i:list){
            char[] temp = i.toCharArray();
            int mul = 1;
            for(char j:temp){
                mul *= Character.getNumericValue(j);
            }
            result += mul;
        }
        System.out.println(result);
    }
}

저 루비로 짠 코드를 보고 어떻게 하면 더 짧아질려나 한참을 고민했습니다. 합성함수를 연속으로 하지도 못하고...

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#파이썬3.5.1
#안전하게
num = []
for i in range(10,1000+1):
    s = list(str(i))
    s = '*'.join(s)
    num.append(eval(s))
print(sum(num))
# answer : 93150
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

Python

sum=0
for n in range(10,1001):
    part=1
    for i in str(n):
        part*=int(i)
    sum+=part
print(sum)

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

Ruby

msum = ->l,h { (l..h).sum {|n| n.digits.reduce:* } }

or

p (10..1000).sum {|n| n.digits.reduce:* }

Test

expect(msum[1,10]).to eq 45
expect(msum[10,15]).to eq 15
expect(msum[10,1000]).to eq 93150
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
C로 풀었습니다.

#include<stdio.h>

int main(void){
    int start, end, nam, mok;
    int i, k;
    int array[1000];
    int value;
    int sum = 0;

    printf("두 숫자를 입력하시오.\n");
    scanf("%d", &start);
    scanf("%d", &end);

    for(i=start; i<end+1; i++){
        mok=i;
        value = 1;
        while(mok>0){
            nam=mok%10;
            mok = mok/10;   
            printf("%d  ", nam);
            value=value*nam;
        }
        printf("value: %d \n", value);
        array[i]=value;
        sum= sum+ value;
    }
    printf("\n");
    for(i=start; i<end; i++){
        printf("%d + ", array[i]);
    }
    printf("%d = %d \n", array[end], sum);
    printf("\n");
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

Java로 작성 (Lambda)

int result = IntStream.rangeClosed(10, 1000).map(x->String.valueOf(x).chars().map(y->y-'0').reduce(1, (acc, element)->acc*element)).sum();

System.out.println(result);
덕분에 많이 배워 갑니다. 감사합니다. - compert, 2016/10/24 11:06 M D
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

PHP로 해봤습니다.

$sum = 0;
for($i=10; $i<=1000; $i++) {
    $str = implode("*", str_split((string)$i));
    $sum += eval("return (".$str.");");
}
echo $sum;
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

자바 로 풀이

답 : 93150
풀이 : i 값 Stirng 변환 -> String 값 char배열로 변환 -> 루프 실행 -> char 값 넘버 변환 -> cnt 에 곱셈 -> total 에 덧셈

    public static void main(String[] args){

        int total = 0;

        for(int i=10; i<=1000; i++){

            Integer num     = i; 
            int cnt         = 1;
            String value    = num.toString();
            char[] chArray  = value.toCharArray();

            for( char ch : chArray){
                cnt *= Character.getNumericValue(ch);
            }

            total += cnt; 
        }

        System.out.println(total);

    }
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#pythion 3.5
print(eval('+'.join('*'.join(str(x)) for x in range(10, 1001))))
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
total = 0
for i in range(10, 1001):
    i = str(i)
    multipled = int(i)
    for i2 in i:
        multipled *= int(i)

    total += multipled


print(total)

답 : 1199498407500445

multipled = 1 이 맞는 것 같습니다. - Flair Sizz, 2016/04/17 18:19 M D
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

풀이 작성

※ 풀이작성 안내
  • 본문에 코드를 삽입할 경우 에디터 우측 상단의 "코드삽입" 버튼을 이용 해 주세요.
  • 마크다운 문법으로 본문을 작성 해 주세요.
  • 풀이를 읽는 사람들을 위하여 풀이에 대한 설명도 부탁드려요. (아이디어나 사용한 알고리즘 또는 참고한 자료등)
  • 작성한 풀이는 다른 사람(빨간띠 이상)에 의해서 내용이 개선될 수 있습니다.
목록으로
코딩도장

코딩도장은 프로그래밍 문제풀이를 통해서 코딩 실력을 수련(Practice)하는 곳입니다.

구현 x 2
연관 문제
genius.choi, 2017/03/17 17:47

언어별 풀이 현황
전 체 x 160
java x 29
python x 69
ruby x 1
기 타 x 19
php x 2
cs x 6
javascript x 5
r x 1
cpp x 24
go x 1
objectivec x 1
matlab x 2