가능한 한 가지 방법 :
#include <stdio.h>
char *digits[10] = {
"Zero", "One", "Two", "Three", "Four",
"Five", "Six", "Seven", "Eight", "Nine"
};
int main() {
int num, digit;
long long tenth = 1;
printf("Please enter an integer: \n");
scanf("%d", &num);
while (tenth < num) {
tenth *= 10;
}
while (tenth > 1) {
tenth /= 10;
digit = num / tenth;
num %= tenth;
printf("%s ", digits[digit]);
}
return 0;
}
데모. 이제 설명을 위해 :
무엇보다도 사용하는 것은 의미가 없습니다. switch
여기 : 숫자는 특성에 따라 꽤 대담하기 때문에 이름은 대신 문자열 배열에 저장 될 수 있습니다 (char *digits[10]
이 코드에서). 그런 다음이 숫자를 색인으로 사용 하여이 배열에 액세스하면 특정 숫자에 대한 레이블을 얻을 수 있습니다.
둘째,이 프로그램의 주요 문제는 각 숫자를 입력에서 별도로 추출하는 것입니다. 오른쪽에서 왼쪽으로가는 것이 더 쉽습니다 (결과를 얻으십시오. number % 10
, 할당 number / 10
에게 number
, 반복), 그러나 여기에서 일은 다른 방식으로 왼쪽에서 오른쪽으로 이루어져야합니다. 이것이 우리가하는 일입니다.
- 계산하다
tenth
- 주어진 숫자보다 큰 10의 첫 번째 힘 (예 : 546에서 일하는 경우 1000).
- 각 후속 반복에서 :
-- 나누다 tenth
10
- 정수 부서의 결과를 처리하십시오 number
~에 의해 tenth
- 다시 할당하십시오 number
나머지 number
로 나눈 tenth
첫 번째 반복에서 tenth
100 (1000/10), 546/100은 5를 제공합니다 (정수로 나뉘어진 정수는 정수, 소수점은 잘립니다), 546 % 100은 46을 제공합니다. 이는 두 번째 반복의 숫자로 저장됩니다.
두 번째 반복에서 tenth
10 (100/10), 46/10은 4, 46 % 10을 제공합니다. 6. 다음주기 : 10/10 => 1, 6/1 => 6, 6 % 1 => 0입니다. tenth
모든 숫자가 처리되면서 1과 동일하고 루프가 중지됩니다.