根据数字的每个数字打印出星号

时间:2016-11-19 13:09:08

标签: c io

我的程序应根据数字的数字打印出星号。这就是应该发生的事情:

  
      
  1. 输入:24 ||输出:2 ** 4 ****
  2.   
  3. 输入:24000 ||输出:2 ** 4 **** 0 0 0
  4.   

这是我的代码:

void histogram (){
int nNum, nCount, nMult, nTemp=-1, n;
printf("Please input a value: "); 
scanf("%d", &nNum);
n=nNum;
do{
    nCount = 0;
    nMult = 1;
    while(n>0){
        n /= 10;
        nCount++;
    } 
    while(nCount>1){
        nMult *= 10;
        nCount--;
    }   
    nTemp = nNum / nMult;
    printf("%d ", nTemp);
    do{
        printf("*");nTemp--;
    }while(nTemp>0);    
    printf("\n");
    nNum%=nMult;
    n = nNum;
}while(n>0);}

我的代码没有打印出尾随的零,我希望你们可以帮我解决这个问题。谢谢!

2 个答案:

答案 0 :(得分:1)

最好使这样的函数递归。它允许保留尾随零。

这是一个示范程序

public List<Mineral> addMineral(Mineral mineral, int amount){
    switch (mineral){
        case Gold:
            break;
    }
}

程序输出可能看起来如下

#include <stdio.h>

void histogram( unsigned int n )
{
    const unsigned int Base = 10;
    const char c = '*';

    unsigned int digit = n % Base;

    if ( n /= Base ) histogram( n );

    printf( "%u ", digit );
    for ( ; digit != 0; --digit ) printf( "%c ", c );
}

int main(void) 
{
    while ( 1 )
    {
        unsigned int n;     

        printf( "Please input a non-negative value (0 - exit): " );

        if ( scanf( "%u", &n ) != 1 || n == 0 ) break;

        printf( "\n" );

        histogram( n );

        printf( "\n" );
    }

    return 0;
}

至于你的方法,你必须在反转数字时计算尾随零。

答案 1 :(得分:0)

在while循环之后,你应该只检查nmult值,其值是10的幂。如果是10,则打印一个零。如果为100,则打印两个零等...每次迭代时循环除以10,如下所示:

while(nmult>1){
    nmult /= 10;
    printf(" 0 ");
}