问一个C语言编程题:

2024-12-31 16:16:52
推荐回答(2个)
回答1:

if(x%(i*i)==0)c++不对,需要每个x%(i*i)都等于0,才能将c加1。所以可以改成
if(x%(i*i)==0)break;
然后在该循环外加上c += (j==(n-i+1));
另外分离每个数的方法不好,每次求出d = 10^k,然后用b/d来分离,不如直接用除10的方法分离b,存入数组供以后使用。
int main()
{
int n, max, i, j, k, A[16];

scanf("%d", &n); //输入位数n
for(i=max=1; i<=n; i++) //10^n
max *= 10;

for(i=max/10,n=0; i {
for(k=0,j=i; j; j/=10) //分离到数组A中
A[k++] = j;
for(j=0; j if(A[j]%((k-j)*(k-j)))break;
n += (j==k); //累加
}
printf("%d", n);
return 0;
}

回答2:

楼上说的在理