【问题标题】:Program to separate digits of a number using asterisk使用星号分隔数字的程序
【发布时间】:2014-06-09 15:55:57
【问题描述】:

我正在构建一个程序,要求用户输入一个 5 位正数。然后它将显示由星号分隔的每个数字。例如,如果用户输入51408,则输出将为5*1*4*0*8

但是,我似乎无法理解找到(数字的)单独数字的逻辑。我该怎么做?

现在,这是我的代码:

#include <stdio.h>

int main()
{
    int mnumber, num5, num4, num3, num2, num1;

    printf("Input number:");
    scanf ("%d", &mnumber);

    //these are the ones that i have trouble with i can't seem to get the logic//
    num5 = (mnumber/10000) / 1;
    num4 = (mnumber/1000) / 1;
    num3 = (mnumber/100) / 1;
    num2 = (mnumber/10) / 1;
    num1 = (mnumber/1) / 1;

    printf("=%d", num5); 
    printf("*%d", num4); 
    printf("*%d", num3); 
    printf("*%d", num2); 
    printf("*%d", num1); 

    return 0;
}

【问题讨论】:

标签: c


【解决方案1】:

要使用您的方法解决问题,您必须在处理完数字后删除该数字的最重要部分。例如:

num5 = mnumber/10000;
mnumber -= num5*10000;
num4  = mnumber/1000;
mnumber -= num4*1000;
num3 = mnumber/100;
mnumber -= num3*100;
num2 = mnumber/10;
mnumber -= num2*10;
num1 = mnumber;

但是,我认为转换为字符串然后打印出该字符串的每个字符会更简洁,并用星号交替显示,如@clcto 所示。

【讨论】:

  • 这不是一个真正的蛮力解决方案吗?
  • @AnthonyLambert 是的,这不是一个优雅的解决方案。它在不循环的情况下显式地写出来。我只是想向提问者展示如何更正他们的版本。我会按照 clcto 演示的方式来做。
【解决方案2】:

您可以将数字转换为字符串(或者可能将输入作为字符串读取并对其进行验证),然后一次打印一个字符:

 char input_str[15];
 sprintf( input_str, "%d", mnumber );

 int len = strlen( input_str );
 if( len > 0 )
     printf( "%c", input_str[0] );

 for( int i = 1; i < len; ++i )
     printf( "*%c", input_str[i] );

【讨论】:

  • 如果字符串是真正的值无关紧要,那么这是一个很好的解决方案......
【解决方案3】:

替代方法:使用字符串

您可以将输入作为stringchar 数组),而不是陷入所有麻烦。这将使您的工作更加轻松和整洁。

解决步骤

我建议你这样做:

1. 将输入读入一个 6 个字符长的字符串。

2. 打印 '=' 即等号。

3. 使用循环逐个打印数字,每个数字前面都有一个 星号。

示例代码

如果你按照上面的步骤,你会想出这样的东西......

int main(void)
{
    //taking string input//
    char num[6];
    printf("Input number:");
    scanf("%s", num);

    //printing = and first digit//
    printf("=");
    printf("%c", num[0]);

    //printing * and digit// 
    for (int i=1; i<5; i++)
    {
        printf("*");
        printf("%c", num[i]);
    }

    return (0);
}  

【讨论】:

    【解决方案4】:

    您可以使用模数% 运算符让您的生活更轻松。

    num5 = (mnumber/10000);
    num4 = (mnumber/1000) % 10;
    num3 = (mnumber/100) % 10;
    num2 = (mnumber/10) % 10;
    num1 = (mnumber/1) % 10;
    

    【讨论】:

      【解决方案5】:

      类似...

      char str[50];
      char tmp[50];
      str[0] = '=';
      str[1] = 0;
      while (mnumber>0)
      {
           int n = mnumber % 10;
           mnumber /= 10;
           if (mnumber>0)
              sprintf (tmp,"%s%d*", str, n );
           else
              sprintf (tmp,"%s%d", str, n );
           strcpy ( str, tmp);
      }
      printf ("%s\n",str);
      

      【讨论】:

      • 这假设它是一个重要的值,而不仅仅是一串字符......它们之间有'*'?
      猜你喜欢
      • 1970-01-01
      • 2016-11-27
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 2010-12-12
      • 2011-06-22
      • 2015-01-15
      相关资源
      最近更新 更多