该程序要求用户插入一个数字。假设我们放了149.现在程序打印出每个包含0位数的数字,直到数字149(包括数字)。所以它将是10,20,30,40,50,60,70,80,90,100,101 ...... 110..140 [假设限制将达到10000]
我一直在努力做到这一点,但我只为每一个添加了+10,但是这不能完成> 100,它是101,102 ..
答案 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'
。
继续阅读:
答案 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