首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在英语中显示整数上的每一个数字的程序不使用以"0“开头的整数

在英语中显示整数上的每一个数字的程序不使用以"0“开头的整数
EN

Stack Overflow用户
提问于 2014-03-08 16:54:28
回答 4查看 6.1K关注 0票数 1

我有一个任务,我必须写一个程序,接受一个从终端输入的整数,并用英语提取并显示整数的每一个数字。我不能使用数组或递归,我们只是从编程开始。

例如:"123“返回”一二三“

我的程序运行良好(大部分情况下),但问题是当您在终端中输入"0123“之类的内容时,程序返回”8-3“.是吗??

这是我的密码:

代码语言:javascript
复制
// Program that takes an integer and displays each digit in English

#include <stdio.h>

int main (void)
{
    int num, digit;
    int reversed = 0, backupZero = 0;

    printf("Please enter an integer:\n");
    scanf("%i", &num);

    if (num == 0) // In case the input is just "0"
    {
        printf("zero");
    }

    while (num > 0) // Loop to reverse the integer
    {
        digit = num % 10;
        reversed = (reversed * 10) + digit;

        if ((reversed == 0) && (digit == 0)) // If the integer finishes in zero
        {
            ++backupZero; // Use this to add extra zeroes later
        }

        num /= 10;
    }

    while (reversed > 0)
    {
        digit = reversed % 10;
        reversed /= 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;
        }

    }

    for (int counter = 0; counter < backupZero; ++counter) // Prints the extra zeroes at the end
    {
        printf("zero ");
        --backupZero;
    }

    printf("\n");

    return 0;
}

可能是数学上的东西,我承认我不擅长它。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-03-08 16:55:47

当你读到数字时

代码语言:javascript
复制
scanf("%i", &num);

你让scanf推断数字的基数。以0开头的数字,后面跟着其他数字,被解释为八进制。所以0123123不一样。事实上,83

代码语言:javascript
复制
0100 = 64
 020 = 16
  03 =  3
---------
0123 = 83

若要将数字读为基数10,请使用

代码语言:javascript
复制
scanf("%d", &num);
票数 3
EN

Stack Overflow用户

发布于 2014-03-08 17:50:28

如果您想处理以'0'开头的数字,那么我建议您将用户输入读入为字符串(字符数组),而不是整数。

此外,您可以使用一个简单的数组来将正确的单词映射到每个数字,而不是对每个字符进行“切换”。

以下是实现这个目标的一种方法:

代码语言:javascript
复制
#include <stdio.h>

#define MAX_INPUT_LEN 100

const char* digits[] = {"zero","one","two"  ,"three","four",
                        "five","six","seven","eight","nine"};

int main()
{
    int i;
    char format[10];
    char str[MAX_INPUT_LEN+1];
    sprintf(format,"%c%us",'%',MAX_INPUT_LEN); // now format = "%100s"
    scanf(format,str); // will write into str at most 100 characters
    for (i=0; str[i]!=0; i++)
    {
        if ('0' <= str[i] && str[i] <= '9')
            printf("%s ",digits[str[i]-'0']);
        else
            printf("invalid character ");
    }
    return 0;
}
票数 0
EN

Stack Overflow用户

发布于 2015-07-16 09:58:33

哦,哇。我花了三四个小时写了下面的代码。我只进入C的第一个星期,所以请考虑。更新:添加了工作减号+一些注释。

代码语言:javascript
复制
#include <stdio.h>
#include <math.h>

int main(void)

{
    int num, count, user, out;
    count = 0;

    printf("Type in any int: ");
    scanf("%d", &num);

    // adding minus to the beginning if int is negative
    if (num < 0) 
    {
        num = -num;
        printf("minus ");
    }
    user = num;

    // creating a power to the future number
    while (num != 0)
    {
       num = num / 10;
       count++;
    }

    int i2;
    i2 = count;

    // main calculations: dividing by (10 to the power of counter) and subtracting from the initial number
    for (int i = 0; i < i2; i++)
    {
        out = user / pow(10, count - 1);
        user = user - out * pow(10, count - 1);
        count--;

        switch (out)
        {
            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;
            case 0:
                printf("zero ");
                break;
            default:
                break;
         }
    }
    printf("\n");

    return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22272230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档