먼저,이 학습은 프로그래밍 학습을 시작할 때 학교에서받는 연습 중 하나와 같습니다. Weeeeell 그것이 그 이상인 것으로 판명되었습니다.어려운 해결책으로 쉬운 운동 C++
주요 운동은 누구나 풀 수있는, 매우 간단하다 :
편집 : 나는 원래 (번역) 문의 보류 가지고 :
쓰기 하나 개의 인수를 가지고 재귀의 기능에 대한 두 가지 구현을 (n = 9 자리의 자연수) n의 첫 번째 숫자를 숫자의 끝으로 재배치하여 얻은 숫자를 반환합니다. 예를 들어, n이 4273이면 함수는 2734를 반환해야합니다. C1) 루프를 사용할 수 있습니다. C2) 루프를 사용할 수 없습니다.
고지, 처음 쉽습니다.
long function(long n)
{
long newNumber = 0, p = 1;
while(n>9)
{
newNumber = n%10 * p + newNumber;
n = n/10;
p = p*10;
}
return newNumber*10+n;
}
이제는 어떤 종류의 루프도 사용하지 않고 동일한 작업을 수행합니다. 아니, 잠시 동안, 등등. 당신은 얼마나 오랫동안인지 모르겠다. 3 자리 숫자일지도 모르겠다. 9 일 수도있다. 또한 모든 일은 오직 하나의 기능만으로 이루어져야한다.
지금, 물론, 하나 개의 간단한 솔루션, 그리고 끔찍한 일이
if(n<100)
return n%10*10+n/10;
else
if(n<1000)
return n%100*10+n/100;
else
if...
...
...
...
같은 것을 작성하는 것입니다 그러나 그것은 코드의 가장 바람직한 부분이 아니다. 이 일을하는 다른 깨끗한 방법이 있습니까? 지금까지 아무도 내가 물어 본 사람이 없습니다.
다른 점이 있습니다. 이것은 초심자가 해결할 수있는 것으로 생각됩니다. (내 친구가 그의 운동 중 하나를 해결하는 것을 돕는 동안 이것을 보았습니다.) 그래서 초보자가 결코 알 수없는 멋진 라이브러리를 사용하면 올바른 해결책이 될 수 없습니다. 나는 모든 아이디어에 대해 궁금해.) | 로그 (N) |
:
또한, 나는 당신이 수는 수식을 사용하여이 자리의 번호를 찾을 수 있다는 사실을 알고
long function(long n)
{
int k; // number of digits of n
k = (int) (ln(n)/ln(10)) + 1; // applying the formula
long p = pow(10, k-1);
return n%p * 10 + n/p;
}
을하지만 고등학교에있는 동안 내가 C++에서 LN 기능에 대해 배운 기억하지 않는 다음과 같이 C++에서 사용할 수 + 1 = LN (N)/LN (10) + 1 그들도 마찬가지였다. 그래서 ... 이렇게하는 초보자 친화적 인 방법이 있습니까? 제약
목록 :
- 하나의 함수
- 없음
- 는
- 의해 형성된 수를 반환한다 (최대 9 자리 숫자)를 숫자 형태로 단지 1 파라미터를 수신하는 루프 첫 번째 숫자를 숫자 끝으로 재배치
- 문자열 없음 (합법적 인 솔루션 임에도 불구하고)
편집 : 그럼으로 나는이 문제를 제안한 해결책이 대수학을 사용하는 해결책이라고 들었습니다 ..... 그 학생은 결코 C++에서 그것을 사용하지 않았기 때문에 어느 것이 이상합니다. 제 추측으로 그들은 성명서에 엿 먹었고, 그것은 그들의 "구원 변명"입니다.
재귀 함수를 사용한다고 생각하십니까? –
표준 라이브러리 함수를 호출 할 수 있습니까? –
번호를 사용해야합니까? 이것은 문자열로 사소한 것입니다. – user4581301