如何用C打印全零?

时间:2015-12-18 18:03:34

标签: c algorithm c99

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

 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;
}

请帮助一些人:)

3 个答案:

答案 0 :(得分:1)

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

String prevId = null;
StringBuilder sql = new StringBuilder();
while (rs.next()) {
    String id   = rs.getString("id");
    String data = rs.getString("data");
    if (id.equals(prevId)) {
        sql.append(" or ");
    } else {
        if (prevId != null)
            sql.append(" union ");
        sql.append("select *, '")
           .append(id) // may need to SQL escape value
           .append("' as id from table_x where ");
        prevId = id;
    }
    sql.append(data);
}

这段代码的作用是嗅探你输入的字符数组,并计算0个字符。然后它可以根据需要打印它们。不需要分裂和变速诡计。

答案 1 :(得分:1)

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

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;
}

答案 2 :(得分:1)

目前的问题是,由于溢出,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);
        }