2、编写程序数一下1到100的所有整数中出现多少次数字9。在写程序之前先把这些问题考虑清楚:
-
这个问题中的循环变量是什么?
-
这个问题中的累加器是什么?用加法还是用乘法累积?
-
在第 2 节 “if/else语句”的习题1写过取一个整数的个位和十位的表达式,这两个表达式怎样用到程序中?
#include<stdio.h> /*统计一串数字中间(从min到max)一个数值(n,n为个位数)出现的次数(i)*/ /*对该数除10取整取余,余数为个位,商继续除10取整取余,将个位数和十位数与n对比*/ int main() { /*初始化范围从min到max,需要查找数字为n*/ int a,b,min,max,n; printf ("please enter the min number:"); scanf ("%d",&min); printf ("please enter the max number:"); scanf ("%d",&max); printf ("please enter the number you want find:"); scanf ("%d",&n); /*n为0的时候,个位数除于10都等于0,导致统计错误*/ /*所以都加1后统计1的数目,此方法不可用,比如0到10中0的个数 if ( n==0 ) { n=n+1; min=min+1; max=max+1; c=0; }*/ int num=min; int i=0; /*n非0时候*/ while ( num<=max ) { a=num%10; b=num/10; if ( a==n ) { i=i+1; } while ( b>10 ) { a=b%10; b=b/10; if ( a==n ) { i=i+1; } } if ( b==n && n!=0 )/*n为0的时候个位数的十位也算0不考虑*/ { i=i+1; } num=num+1; } /*n等于0的时候之前都加1,此处还原 if ( c==0 ) { n=n-1; min=min-1; max=max-1; }*/ printf ("There are %d %d from %d to %d!\n",i,n,min,max); return 0; }
程序是修改后的,可以统计非负整数任意范围内某任意数字出现的次数。
____________________________________________________________________________________________________________________
之前把问题复杂化了,可以一直取余到个位只用个位进行对比就可以了,根本不用考虑十位,修改后的代码如下:
#include<stdio.h>
/*统计一串数字中间(从min到max)一个数值(n,n为个位数)出现的次数(i)*/
/*对该数除10取整取余,余数为个位,商继续除10取整取余,将个位数与n对比*/
int main()
{
/*初始化范围从min到max,需要查找数字为n*/
int a,b,min,max,n;
printf ("please enter the min number:");
scanf ("%d",&min);
printf ("please enter the max number:");
scanf ("%d",&max);
printf ("please enter the number you want find:");
scanf ("%d",&n);
int num=min;
int i=0;
while ( num<=max )
{
a=num%10;
b=num/10;
if ( a==n )
{
i=i+1;
}
while ( b>0 )
{
a=b%10;
b=b/10;
if ( a==n )
{
i=i+1;
}
}
num=num+1;
}
printf ("There are %d %d from %d to %d!\n",i,n,min,max);
return 0;
}
转载请注明源地址:http://blog.csdn.net/whorus1/article/list/2,谢谢!