打印每位数字为0的数字(仅自然)

时间:2014-02-25 17:46:48

标签: c loops for-loop

该程序要求用户插入一个数字。假设我们放了149.现在程序打印出每个包含0位数的数字,直到数字149(包括数字)。所以它将是10,20,30,40,50,60,70,80,90,100,101 ...... 110..140 [假设限制将达到10000]

我一直在努力做到这一点,但我只为每一个添加了+10,但是这不能完成> 100,它是101,102 ..

4 个答案:

答案 0 :(得分:1)

使用函数sprintf将整数转换为字符串,然后在字符串中搜索字符'0'。如果找到,则打印该号码。这是一个实现这个想法的简单工作程序。

#include <stdio.h>
#include <string.h>

#define MAXLEN 50    // max number of digits in the input number

int main(void) {
    char buf[MAXLEN + 1];   // +1 for the null byte appended by sprintf
    char ch = '0';          // char to be searched for in buf
    int i, x;
    if(scanf("%d", &x) != 1) {   
        printf("Error in reading input.\n");
        return -1;
    }
    for(i = 1; i <= x; i++) {   
        sprintf(buf, "%d", i); // write i to the string buffer and append '\0'
        if(strchr(buf, ch))  // strchr returns a pointer to ch if found else NULL
            printf("%d\n", i);
    }
    return 0;
}

您还可以提取给定范围内整数的每个数字,并将其检查为零。这是一个天真的实现。

#include <stdio.h>

int main(void) {
    int i, x;
    int r;
    if(scanf("%d", &x) != 1) {
        printf("Error in reading input.\n");
        return -1;
    }
    for(i = 1; i <= x; i++) {
        for(r = i; r > 0; r /= 10) {
            if(r%10 == 0) {
                printf("%d\n", i);
                break;
            }
        }
    }
    return 0;
}

答案 1 :(得分:0)

首先,请考虑将每个号码转换为char [],然后检查它是否包含'0'

继续阅读:

  1. How to check if a int var contains a specific number

  2. Count the number of Ks between 0 and N

答案 2 :(得分:0)

我认为这就是答案。

int j;
for(int i=1;i<150;i++){
   j=i;   
         while(j>0)
         {
         if(j%10==0)
         {
           printf("%d\n",i);
           break;
         }
         else 
           j=j/10;
        }
}

答案 3 :(得分:0)

简单的方法是迭代所有自然数直到目标数,并测试每个自然数以查看它们是否有任何零数字。注意,非负整数i的最后一个数字可以作为基数除法的余数(此处为i % 10)获得。还要记住C中的整数除法截断小数,例如(12 / 10) == 1