我们需要实现一个程序来统计1到100之间数字9出现的次数。在这个问题中,我们可以使用三种方法来解决:
让我们分别实现这三种方法。
解题思路:
实现代码:
#include
int main() {
int count = 0;
for (int num = 1; num <= 100; num++) {
int n = num;
while (n > 0) {
if (n % 10 == 9) {
count++;
break;
}
n /= 10;
}
}
printf("Method 1: The digit 9 appears %d times between 1 and 100.\n", count);
return 0;
}
优点:
缺点:
解题思路:
实现代码:
#include
#include
int main() {
int count = 0;
for (int num = 1; num <= 100; num++) {
char str[4]; // 数字不超过3位
snprintf(str, sizeof(str), "%d", num);
if (strchr(str, '9') != NULL) {
count++;
}
}
printf("Method 2: The digit 9 appears %d times between 1 and 100.\n", count);
return 0;
}
优点:
缺点:
解题思路:
实现代码:
#include
int main() {
int count = 0;
for (int num = 1; num <= 100; num++) {
if (num % 10 == 9 || (num / 10) % 10 == 9) {
count++;
}
}
printf("Method 3: The digit 9 appears %d times between 1 and 100.\n", count);
return 0;
}
优点:
缺点:
在这个问题中,推荐使用方法三,即数学法。它是最高效的解决方案,无需实际遍历所有数字,而是利用规律直接计算出结果。方法一和方法二虽然通用,但在大范围内的数字统计时可能效率较低,而且方法二需要额外的内存来存储字符串。方法三是最好的选择,特别是在需要统计大范围内数字出现次数时。