我正在构建一个程序,要求用户输入一个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;
}
答案 0 :(得分: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所示。
答案 1 :(得分:1)
您可以将数字转换为字符串(或者可以在输入中将其作为字符串读取并对其进行验证),然后一次打印一个字符:
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] );
答案 2 :(得分:1)
您可以将输入视为string(char
数组),而不是陷入所有麻烦。这将使您的工作更轻松,更整洁。
我建议您这样做:
1。将输入读取为长度为6个字符的字符串。
2。打印&#39; = &#39;即等号。
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);
}
答案 3 :(得分:0)
您可以使用模数%
运算符让您的生活更轻松。
num5 = (mnumber/10000);
num4 = (mnumber/1000) % 10;
num3 = (mnumber/100) % 10;
num2 = (mnumber/10) % 10;
num1 = (mnumber/1) % 10;
答案 4 :(得分:0)
像...一样的东西。
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);