这段代码似乎不适合我。它输出数字17,这显然是wrong.the计数器,如果遇到5,15,25,50等数字,就应该递增。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(void) {
int i;
int counter;
char num[4322];
for (i = 1; i < sizeof(num); i++){
num[i] = i;
if ( strstr(&num[i], "5")){
counter = counter + 1;
}
}
printf("%d", counter);
return 0;
}
发布于 2016-04-21 06:26:54
您没有将数字转换为字符串,而是向strstr()
传递了不是以null结尾的字符串。您还忘记了初始化counter
。
你应该一个接一个地检查数字。试试这个:
#include <stdio.h>
int main(void) {
int max = 4322;
int target = 5;
int i, cur, counter = 0;
for (i = 1; i <= max; i++) {
for (cur = i; cur > 0; cur /= 10) {
if (cur % 10 == target) counter++;
}
}
printf("%d\n", counter);
return 0;
}
发布于 2016-04-21 06:28:19
这段代码中有很多问题。
char num[4322];
这是一个4322个字符的数组。你可能不想这样,我不知道为什么它会出现在这里。
num[i] = i;
这是无效的,因为您不能将大数字分配给char
。这不会将数字转换为字符串,而是会将数字转换为不同的char
。所以5不会变成"5"
,但会变成\x05
。
strstr(&num[i], "5")
这将搜索"5"
,但是因为该数组不是以nul结尾的,所以它是不正确的。另请注意,您存储的是
int counter;
请注意,counter
未初始化。这是一个错误。
下面是一个类似的程序,它是正确的(但本身并不“有效”):
#include <stdio.h>
#include <string.h>
int main() {
int counter = 0; // initialize to 0
for (int i = 0; i < 4322; i++) {
// Put the number in a string
char buf[10];
snprintf(buf, sizeof(buf), "%d", i);
// Count 5s
for (char *p = buf; *p; p++) {
if (*p == '5') {
counter++;
}
}
}
printf("%d", counter);
}
请注意,@MikeCAT的答案跳过了int ->字符串转换,这在某种程度上是不必要的。
https://stackoverflow.com/questions/36756225
复制相似问题