如何在 C 中打印全零?

How to print All zeros in C?

我想使用这段代码打印输入中的所有零。 例如:

 input: 10000 -------------- output: 0000

但我明白了:

 input: 10000 -------------- output: 0

这是C99中的源代码:

#include<stdio.h>
int main() {

  int co = 0, inputNumber, i, j, prod = 1, number = 0, ten = 10, newValue;
  int numberOfInputs;
  scanf("%d", &numberOfInputs);

  for(i = 1; i <= numberOfInputs; i++) {
    scanf("%d", &inputNumber);

    for(j = 1; j < inputNumber; j++) {
      if(inputNumber % j == 0) {
        prod = prod * j;
      }
    }
    if(prod < 10000)
      printf("%d", prod);

    else {
      newValue = prod;
      while((int)prod / 10 != 0) {
        prod = (int) prod/10;
        co++;
        number = newValue % ten;
        ten *= 10;
        if(co == 4) {
          printf("%d \n", number);
          break;
        }
      }
    }
  }
  return 0;
}

请大家帮忙:)

使用完全不同的方法,您可以这样做:

#include<stdio.h>
int main(){

    int zeroCounter=0;
    char inputNumber[256];
    printf("Please enter the numerical value:");

      fgets(inputNumber,256, stdin);
        int j;
        for(j=0; inputNumber[j]!='\n'; j++)
        {
            if(inputNumber[j]=='0') zeroCounter++;
        }

        printf("this value had %d zeros, here they are:    ",zeroCounter);

        while(zeroCounter!=0)
        {
            printf("0");
            zeroCounter--;
        }
        printf("\n");
return 0;
}

此代码的作用是嗅探您输入的字符数组,并对 0 个字符进行计数。然后它可以根据需要打印它们。不需要除法和位移位恶作剧。

所以基本上,您想要打印出带前导零的产品的最低四位数字,这非常简单:

printf( "%04d\n", prod % 10000 );

稍微清理并重新格式化您的代码基本上可以简化为:

#include <stdio.h>

int main( void )
{
  int inputNumber, i, j, prod=1;
  int numberOfInputs;

  scanf( "%d", &numberOfInputs );
  for(i = 1; i <= numberOfInputs; i++ )
  {
    scanf("%d", &inputNumber);
    for(j = 1; j < inputNumber; j++ )
    {
      if( inputNumber % j == 0)
      {
        prod = prod*j;
      }
    }

    printf( "%04d\n", prod % 10000 );
  }
  return 0;
}

那么你目前的问题是,由于溢出,prod 结束为 0。而作为 0 < 10000,你只是通过单个打印:if(prod<10000)printf("%d",prod); 只是绕过你所有的复杂的打印代码。 事实上,它至少在小至 84 时溢出(变为负值)。

但这还不是全部。即使 prod 没有溢出,您也可以在 number 中计算最多 4 位数字,但如果以 %d 格式打印。如果 number 小于 1000,则不会以该格式打印最高位 0,但应使用 %04d.

这是一个最低限度的固定版本:

int main(){


    int co=0,inputNumber,i,j,prod=1,number=0,ten=10,newValue;
    int numberOfInputs;
    scanf("%d",&numberOfInputs);
    for(i=1;i<=numberOfInputs;i++)
    {
        scanf("%d",&inputNumber);
        prod = 1; /* reset prod */
        for(j=1;j<inputNumber;j++) {
            if(inputNumber%j==0) {
                prod = prod*j;
                if (prod <= 0) {
                    break;
                }
            }
        }
        if (prod <=0) {
            printf("Overflow\n");
        }
        else if(prod<10000) {
            printf("%04d\n",prod);
        }

        else
        {
            newValue = prod;
            while((int)prod/10 != 0)
            {
                prod = (int)prod/10;
                co++;
                number = newValue%ten;
                ten*=10;
                if(co==4)
                {
                    printf("%04d \n",number);
                    break;
                }
            }
        }
    }
    return 0;
}

但实际上 else 部分应该只是:

        else
        {
            printf("%04d \n",prod % 10000);
        }