设计思想:
通过大量数据分解找规律
abcd 从d开始若d=0则count(1的个数)=左边的abc *d的位值(1、10、100、、) 若等欲1则count=左边的abc*d的位值(1、10、100、、),若为大于1的值则为(左边的abc +1)*d的位值(1、10、100、、) ,依次对c,b,a进行count++。
源代码:
#include<iostream>
using namespace std;
void main()
{
int N= 124;
int weizhi= 1; // 标记计数1的位数(1为个位,10为十位)
int now= 0; // 当前位数数字
int down= 0; // 较低位数字大小(可为多位)
int up= 0; // 较高位数字大小
int count= 0;
cout<< " 输入N: "<<endl;
cin>>N;
while(N/weizhi!= 0)
{
// 获取数字
now=(N/weizhi)% 10;
down=N-(N/weizhi*weizhi);
up=N/(weizhi* 10);
if( 0==now) // 当前数字为0时计数
{
count+=up*weizhi;
}
else if( 1==now) // 当前数字为1时计数
{
count+=up*weizhi+down+ 1;
}
else
{
count+=(up+ 1)*weizhi;
}
weizhi=weizhi* 10; // 数字左移一位
}
cout<< " 输出1的个数: ";
cout<<count<<endl;
}
using namespace std;
void main()
{
int N= 124;
int weizhi= 1; // 标记计数1的位数(1为个位,10为十位)
int now= 0; // 当前位数数字
int down= 0; // 较低位数字大小(可为多位)
int up= 0; // 较高位数字大小
int count= 0;
cout<< " 输入N: "<<endl;
cin>>N;
while(N/weizhi!= 0)
{
// 获取数字
now=(N/weizhi)% 10;
down=N-(N/weizhi*weizhi);
up=N/(weizhi* 10);
if( 0==now) // 当前数字为0时计数
{
count+=up*weizhi;
}
else if( 1==now) // 当前数字为1时计数
{
count+=up*weizhi+down+ 1;
}
else
{
count+=(up+ 1)*weizhi;
}
weizhi=weizhi* 10; // 数字左移一位
}
cout<< " 输出1的个数: ";
cout<<count<<endl;
}
总结:从大量数据中分析有特点的几个数比如0,1,大于1的数含这些数的数,虽然做出来了但换是没弄清具体是什么原理。