计算从1到n(包括n)之间出现的各位数字的个数

本文介绍了一个C++程序,该程序能够计算从1到指定最大值范围内特定数字出现的总次数。通过递归地分解数值并统计每一位上目标数字的出现次数来实现这一功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 #include <iostream>
using namespace std;

int countm(int max,const int &n)
{
 //在1到max之间的数中,计算数字n出现的次数,并返回
 int total=0;                                 //记录n出现的位数
 int num=0;                                   //每个权值内出现的n的个数,如10(1-9)内,1-9各出现一次  
 int a=1;                                     //操作的位,a等于1时,操作的位为个位,依次类推    
 int c=0;                                     //每位上出现的数字
 int b=0;                                     //当前操作位后的数(如115,现在操作的位为百位1,则b等于15)
 while(max>0){                  
  num=num*10+a/10;                         //权值a内出现的n的个数,如a=100时,num=20;表示每一百个数内出现20个n
  b=a*c/10+b;                              //计算得到b
  c=max%10;                                //得到当前需要处理的位上的数字(0-9)
  max=max/10;                              //得到下一下需要操作的位
  if(c>n&&n) total+=a+c*num;               //当前位大于n,且n不等于0时,对n出现的次数累加
  else if(!n&&c>n) total+=c*num;           //当前位大于n,且n等于0时,对n出现的次数累加
  else if(c==n) total+=c*num+b+1;          //c=n时,对n出现的次数累加
  else total+=c*num;                       //c<n时,对n出现的次数累加
  a=a*10;                                  //权值增加,如由10变为100
 }
 return total;                                //返回n出现的位数
}

int main()
{
 int num;                                     //当前需要操作的数
 for(int i=0;i<total;i++)
 {                                          
  cin>>num;                            //读取当前需要操作的数
  for (int j=0;j<=9;j++)
   cout<<countm(num,j)<<" ";      //调用countm×),对1-num内出现的j的个数进行计算,并输出到out.txt文件
  cout<<endl;                         
 }
 system("pause");
 return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值