2017-11-05 15 views
0

숫자가 11 개의 값에 도달 할 때까지 (1, 3 * 5, 5 * 7 * 9, 7 * 9 * 11 * 13, ...) 순서대로 숫자를 곱해야합니다. 이 코드를 사용했습니다 :C# : 루프 내 계산

for (int t = 1; t <= 11; t++) 
{ 
    for (int i = (2 * t) - 1; i <= (4 * t) - 3; i = i + 2) { 
     result = result * i; 
    } 

} 
Console.WriteLine(result); 

그러나이 코드는 반복 될 때마다 이전 결과와 곱합니다. (예 : 1, 15, 4725, 42567525, ...) 어떻게 해결할 수 있습니까?

+0

정말 당신은 더 많은 설명을 제공하기 위해 시도 할 수 있습니다, 당신이 뭘 하려는지 이해가 안 돼요? (예상되는 동작과 유사) – OznOg

답변

1

그냥 각 단계 후 결과를 재설정 :

for (int t = 1; t <= 11; t++) 
{ 
    result = 1; 
    for (int i = (2 * t) - 1; i <= (4 * t) - 3; i = i + 2) { 
     result = result * i; 
    } 
    Console.WriteLine(result); 
} 

업데이트 : 여기에 작업 예제, 단지 실행을 클릭 숫자가 간단한 정수에 대한 큰에지고 있었기 때문에 내가 이중으로 결과를 초기화 https://repl.it/Nlab/1 참고.

0

인쇄물은 루프의 경우 첫 번째 안에 있어야합니다. 현재는 완벽하게 작동되지만 문제는

귀하의 코드가 있어야 정확한 시간에 그것을 인쇄되지 않는 경우입니다 :

int result = 1; 
    for (int t = 1; t <= 11; t++) 
    { 
     for (int i = (2 * t) - 1; i <= (4 * t) - 3; i = i + 2) 
     { 
      result = result * i; 
     } 
     Console.WriteLine(result); 
    } 

하지만 난 당신이 사용하는 것이 좋습니다 것입니다 INT64 대신 INT의 경우 오버플로입니다.

0

이 시도 :

var numbers = 
    Enumerable 
     .Range(1, 11) 
     .Select(n => 
      Enumerable 
       .Range(0, n) 
       .Select(x => ((long)n + (long)x - 1L) * 2L + 1L) 
       .Aggregate((x0, x1) => x0 * x1)); 

Console.WriteLine(String.Join(Environment.NewLine, numbers)); 

내 준다 :

 
1 
15 
315 
9009 
328185 
14549535 
760543875 
45808142625 
3124115327025 
237984079323375 
20028239096740875