今天看了一本书,上面说,如果你想编程,就要先把自己想做的先写在纸上,然后按流程去做。
我才突然发现,为什么我解决不了这个问题,原来,我一直在用脑子想,脑子再聪明也记不住所有环节。特别是编程。里面要注意的太多了。所以我就写了一份流程。在写的时候,就把问题给解决了,然后把源码打上,呵呵,原来一切如此简单。
#include
<
iostream
>
using
namespace
std;



int
quan(
long
);
//
求一个数的位数,也称这个数的最高权
int
bit(
long
);
//
求一个数最高的位上面的数;
long
sumhigh(
long
);
//
砍掉一个数的最高位;
long
pow(
int
x,
int
y);
//
算一个数的正整数幂


int
main()

...
{

longa,b,c,high,d;//a,是放输入数的,b是放结果的,c是放过程结果的,high是最高位
inty;//d是放a的值,y是放最高位的

cout<<"请输入一个整数,我们将判断它包含的数中有多少个1: ";
cin>>a;

d=a;
b=0;
high=0;
for(longi=quan(a);i>0;--i)

...{


if(quan(a)<i)y=0;

elsey=bit(a);


if(y==1)

...{
c=high*pow(10,i-1)+sumhigh(a)+1;
b=b+c;
}

elseif(y>1)

...{
c=high*pow(10,i-1)+pow(10,i-1);
b=b+c;
}
elseif(y==0&&i!=1)

...{
c=high*pow(10,i-1);
b=b+c;
}
elseif(y==0&&i==1)

...{
c=high;
b=b+c;
}

high=d/pow(10,i-1);
if(y!=0)a=sumhigh(a);

}

cout<<"包含1的个数有:"<<b<<"个 ";



}


int
quan(
long
x)

...
{
boola=true;
intb=0;
do

...{
if(x<1)

...{
a=false;
}
else

...{
x=x/10;
b++;
}
}while(a);
returnb;
}

int
bit(
long
x)

...
{
inta,b=1;
do

...{
if(x>=10)

...{
x=x/10;
}
elseb=0;
}while(b);
returnx;
}

long
sumhigh(
long
x)

...
{
longa;
a=x-bit(x)*pow(10,quan(x)-1);
returna;
}

long
pow(
int
x,
int
y)

...
{
longa=1;
if(y>0)

...{
for(inti=0;i<y;++i)

...{
a=a*x;
}
}
elseif(y==0)a=1;


returna;
}
我才突然发现,为什么我解决不了这个问题,原来,我一直在用脑子想,脑子再聪明也记不住所有环节。特别是编程。里面要注意的太多了。所以我就写了一份流程。在写的时候,就把问题给解决了,然后把源码打上,呵呵,原来一切如此简单。










































































































































