编写程序数一下 1到 100 的所有整数中出现多少次数字9
这里我们通过递归的方法,将数字依次拆分,从右至左判断每一个数字中的每一位是否为9,,代码如下:
#include <iostream>
using namespace std;
#define NUM 100
#define FOCT 9
int sta(int num, int sum) {
if (FOCT == num % 10) {
sum++;
}
if (0 < num / 10) {
sum = sta(num / 10, sum);
}
return sum;
}
int main() {
int sum = 0;
int i = 0;
for (i = 1; i <= NUM; i++) {
sum += sta(i, 0);
}
cout <<"从 1 到 " <<NUM <<" 之间一共有" <<sum <<"个" <<FOCT << endl;
system("pause");
return 0;
}
个人认为在上面的代码中,sta 函数存在缺陷,它附带了一个不必要的参数,但是却解决了递归过程中可能会二次定义同一变量的问题。
sta 函数中 sum 的作用就相当于一个计数器,每当 sta 的第一个参数的个数位为 9 时便会加一,当一个数字的所有位数都代入过 sta 函数后,便可得到这个数字中存在多少个 9 了,最后将每个数字中 9 的个数汇集到一起,就得到了1到 100 的所有整数中出现数字 9 的次数。
20190127