c - 用英语打印一个整数

标签 c integer

我正在用 C 语言编写代码来显示任意正整数的数字。 例如,整数 345 将显示为三四五。

我编写的代码适用于所有数字都大于 0 的整数。但某些整数(如 10、304、0 等)无法正确显示。为了挑战,不允许使用递归和数组。只允许循环和 if 构造。 有什么建议吗?

#include<stdio.h>
int main(void)
{
    int num, num_copy, accum = 1;

    printf("Enter an integer ");
    scanf("%i",&num);

    num_copy = num;

    while (num > 0){

    while (num > 9){
        num = num / 10;
        accum *= 10;
        }
        switch (num){

        case (1):
                printf("one ");
                break;
        case (2):
                printf("two ");
                break;
        case (3):
                printf("three ");
                break;
        case (4):
                printf("four ");
                break;
        case (5):
                printf("five ");
                break;
        case (6):
                printf("six ");
                break;
        case (7):
                printf("seven ");
                break;
        case (8):
                printf("eight ");
                break;
        case (9):
                printf("nine ");
                break;
        }
        num_copy = num_copy - (num*accum);
        num = num_copy;
        accum = 1;
    }

    return 0;
}

最佳答案

哦!这听起来很有趣!没有数组也没有递归吧?

因此,由于我们不能使用递归,因此我们需要向后构建数字:

#include<stdio.h>
int main(void)
{
    int num, backwards = 0, digit, backupzeros = 0;

    printf("Enter an integer ");
    scanf("%i",&num);            // get the number

    while(num > 0){
        digit = num % 10;    // pry off the last digit
        num /= 10;           // take off the digit

        if((backwards == 0) && (digit == 0))    // If it's a number that ends in 0
            backupzeros++;                   // save it, we'll use that later

        backwards = (backwards * 10) + digit; // glue it on backwards
    }

    // Now we have the number reversed. Next we need to print the digits

    while (backwards > 0){
        digit = backwards % 10;
        backwards /= 10;

        switch (digit){

        case 1:
                printf("one ");
                break;
        case 2:
                printf("two ");
                break;
        case 3:
                printf("three ");
                break;
        case 4:
                printf("four ");
                break;
        case 5:
                printf("five ");
                break;
        case 6:
                printf("six ");
                break;
        case 7:
                printf("seven ");
                break;
        case 8:
                printf("eight ");
                break;
        case 9:
                printf("nine ");
                break;
        default:
                printf("zero ");
                break;
        }
    }

    while(backupzeros > 0) {
        printf("zero ");
        backupzeros--;
    }

    return 0;
}

关于c - 用英语打印一个整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13400602/

相关文章:

c++ - 向 C++ 结构添加新成员并向后兼容

java - 列出任何除以五或六的整数

C++ 为什么不提供整数的系统最大大小?

javascript - BugHunt - Javascript 解析错误?

c++ - 为什么 -2147483648 和 (int)-2147483648 不同

java - 如何使用 try 和 catch 验证用户输入?

c - 如何删除 (POSIX) C 中的目录及其内容?

c++ - 如何计算尾数位数?

c++ - GCC在被杀死时创建带有随机后缀的目标文件

c - 为什么这段代码会出现段错误