crc循环校验算法:算法循环求出每个数中1的个数



算法思想:

循环求出每个数中1个数累计的若满足f(n)=n则退出否则继续
代码如下:
/**//************************************************************************
*0~n的间1个数,如f(13)=6
*1,2,3,4,5,6,7,8,9,10,11,12,13.1个数为6
*要求:输入个正整数n,求出f(n),及求解f(n)=n
************************************************************************/

#<stdio.h>
#<.h>
#<Windows.h>

CalculationTimes
...{
public:
CalculationTimes...{}
~CalculationTimes...{}

GetTimes(n);
};

//计算正整数n中1个数
CalculationTimes::GetTimes(n)
...{
count=0;
while(n)
...{
(n%101)
count;
n/=10;
}
count;
}

//显示菜单
voidshow_menu
...{
prf(\"---------------------------------------------\");
prf(\"inputcommandtotesttheprogram\");
prf(\"iorI:inputntotest\");
prf(\"gorG:getntoenablef(n)=n\");
prf(\"qorQ:quit\");
prf(\"---------------------------------------------\");
prf(\"$inputcommand>\");
}

void
...{
charsinput[10];
n;

show_menu;

scanf(\"%s\",sinput);
while(stricmp(sinput,\"q\")!=0)
...{
t=0,count=0;
(stricmp(sinput,\"i\")0)
...{
prf(\"pleaseinputaneger:\");
scanf(\"%d\",&n); [Page]

count=0;
CalculationTimesobj;
t=GetTickCount;
for(i=1;i<=n;i)
countobj.GetTimes(i);
t=GetTickCount-t;
prf(\"count=%dtime=%d\",count,t);
}
(stricmp(sinput,\"g\")0)
...{
CalculationTimesobj;
n=2;
count=1;
t=GetTickCount;
while(1)
...{
countobj.GetTimes(n);
(countn)
;
n;
}
t=GetTickCount-t;
prf(\"f(n)=n=%dtime=%d\",n,t);


}


//输入命令
prf(\"$inputcommand>\");
scanf(\"%s\",sinput);
} [Page]
}
运行结果如下:
\"\"
Tags:  crc循环校验算法

延伸阅读

最新评论

发表评论