/* ============================================================================ Name : telephoneNum.c Author : qibaoyuan Version : Copyright : Your copyright notice Description : Hello World in C, Ansi-style ============================================================================ */ #include <stdio.h> #include <stdlib.h> #include <string.h> char c[10][10] = { "", "", "ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ" }; int total[10] = { 0, 0, 3, 3, 3, 3, 3, 4, 3, 4 }; void transform(char *numbers) { //输入字符串的长度 int n = strlen(numbers); //将数字目前所代表的字符在其所能代表的字符集中的位置用该数组存储 int *answer = (int*) calloc(sizeof(int), n); int i = 0; while (1) { for (i = 0; i < n; ++i) { printf("%c", c[numbers[i] - '0'][answer[i]]); } printf("/n"); int k = n - 1;//第k的数字 while (k >= 0) { //下一位, if (answer[k] < total[numbers[k] - '0'] - 1) { answer[k]++; break; } else {//到头,置0,位置为0 answer[k] = 0; k--; } } if (k < 0) break; } } void recursiveTransform(char*numbers, int*answer, int index, int n) { int i = 0; if (index == n) { for (i = 0; i < n; i++) { printf("%c", c[numbers[i] - '0'][answer[i]]); } printf("/n"); return; } for (answer[index] = 0; answer[index] < total[numbers[index] - '0']; answer[index]++) { recursiveTransform(numbers, answer, index + 1, n); } } int main(void) { //transform("2345"); char* numbers = "2345"; int n = strlen(numbers); int *answer = (int*) calloc(sizeof(int), n); recursiveTransform(numbers, answer, 0, n); return EXIT_SUCCESS; }