69,379
社区成员
发帖
与我相关
我的任务
分享
int calcDigits(int dec, int *digits)
{
if ((dec = dec / 2) > 0){
++(*digits);
dec = calcDigits(dec, digits);
}
else
return (*digits + 1);
}
calcDigits(int dec)
{
if( 0 == dec) {
return 0;
}
return calcDigits(dec>>1) + 1;
}
int calcDigits(int dec)
{
int n = 0;
while(dec != 0) {
dec = dec>>1;
++n;
}
return n;
}
若使用楼主的递归方法:calcDigits(int dec)
{
if( 0 == dec) {
return 1;
}
return calcDigits(dec>>1) + 1;
}
若依楼上的说在函数内部定义个static变量存储这样会有问题,第一次调用此函数没错,但第二次调用时有错误,会累加上一次的值。以上代码为手工,可能编译会用问题,楼主掂量下。int calDigits(int dec)
{
int rs =1;
for(;rs<(1<<(sizeof(int) +1));rs++)
{
if( (dec>>rs) == 0)
break;
}
return rs;
}
int calcDigits(int dec, int *digits=NULL)
{
if ((dec = dec / 2) > 0){
++(*digits);
dec = calcDigits(dec, digits);
}
else
return (*digits + 1);
}
#include <stdio.h>
main()
{
int decimal;
int &digits = 0;
scanf("%d", &decimal);
digits = calcDigits(decimal, digits);
printf("%d\n", digits);
return 0;
}
int calcDigits(int dec, int &digits)
{
if ((dec = dec / 2) > 0){
++digits;
dec = calcDigits(dec, digits);
}
else
return (digits + 1);
}
~
printAsBinary_e2.c: In function ‘main’:
printAsBinary_e2.c:5:13: error: expected identifier or ‘(’ before ‘&’ token
printAsBinary_e2.c:8:9: error: ‘digits’ undeclared (first use in this function)
printAsBinary_e2.c:8:9: note: each undeclared identifier is reported only once for each function it appears in
printAsBinary_e2.c: At top level:
printAsBinary_e2.c:13:29: error: expected ‘;’, ‘,’ or ‘)’ before ‘&’ token
int calcDigits(int dec, int &digits)
{
if ((dec = dec / 2) > 0){
++digits;
dec = calcDigits(dec, digits);
}
else
return (digits + 1);
}