Linux C一站式学习习题答案6.1.2统计个数

2、编写程序数一下1到100的所有整数中出现多少次数字9。在写程序之前先把这些问题考虑清楚:

  1. 这个问题中的循环变量是什么?

  2. 这个问题中的累加器是什么?用加法还是用乘法累积?

  3. 第 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,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值