7.统计某类完全平方数
主要难点我认为在于怎样判断该整数是否能被开根
先后尝试了三种方法:
- if (sqrt(N)==(int)sqrt(N)) 该方法或许可行,但可能会由于十进制转二进制会有误差所以不行。
- double a; a=sqrt(N); if(a*a==N) 已证实该方法不行,但我也不太清楚为什么不行,如果有看到的大佬可以帮忙解答一下。
- if (round(sqrt(N),6)==int(sqrt(N))) 据大佬所说该方法更加精确了,但由于测试数据不多,我也看不出什么区别。
int IsTheNumber ( const int N )
{
int b[10]={0},c;
if(sqrt(N)==(int)sqrt(N)
{
c=N;
while(c>0)
{
int i=c%10;
b[i]++;
if(b[i]==2)
{
return 1;
break;
}
c=c/10;
}
}
return 0;
}
8.简单阶层计算
问题主要出在while的判断条件上,在debug之前我给写成了i>0
int Factorial( const int N )
{
int i=N,S=N;
if(N==0)
return 1;
else if(N<0)
return 0;
else
{
while(i>1)
{
S=S*(i-1);
i--;
}
return S;
}
}
9.统计个位数字
跟第七道题差不多,思路一样
a[10]={0}
int Count_Digit ( const int N, const int D )
{
int a[10]={0};
int t=N;
int i;
if(t<0)
t=t*(-1);
if(t==0)
return 1;
while(t>0)
{
i=t%10;
a[i]++;
t=t/10;
}
return a[D];
}