标签:
一、题目要求
#include<iostream>
#include<math.h>
using namespace std;
int Count1Num(int Digit)
{
int figure=1;//标记计数1的位数(1为个位,10为十位)
int curOfDigit=0;//当前位数数字
int lowerOfDigit=0;//较低位数字大小(可为多位)
int higherOfDigit=0;//较高位数字大小
int count=0;
while(Digit/figure!=0)
{
//获取数字
curOfDigit=(Digit/figure)%10;
lowerOfDigit=Digit-(Digit/figure*figure);
higherOfDigit=Digit/(figure*10);
if(Digit<=0)
return 0;
if(0==curOfDigit)//当前数字为0时计数
{
count+=higherOfDigit*figure;
}
else if(1==curOfDigit)//当前数字为1时计数
{
count+=higherOfDigit*figure+lowerOfDigit+1;
}
else
{
count+=(higherOfDigit+1)*figure;
}
figure=figure*10;//数字左移一位
}
return count;
}
void main()
{
int Digit;
int max=0;
while((cout<<"请输入要测试的数值(输入-1结束测试):"<<endl)&&(cin>>Digit))
{
if(Digit==-1)
break;
cout<<"1到"<<Digit<<"包含的1个数:"<<Count1Num(Digit)<<endl;
}
}
四、运行截图

五、实验总结
题目的难点主要是在于寻找“1”出现的规律,然后根据找到的贵写出相应的算法。题目不算难,但是规律还是很难找的。
标签:
原文地址:http://www.cnblogs.com/huangxiaofei/p/4472365.html