用c语言编写程序找出所有满足以下特性的6位整数:它是一个完全平方数(完全平方数是指该数是某个整数的平方),该数同时也是回文数(回文数是指该数等于它的反序数)。下面这段代码为什么不对#include <stdio.h> #include <math.h> int inv(int a){ return a%10*100000+a/10%10*10000+a/100*1000+a/1000*100+a/10000*10+a/100000; } int main(){ int arr[1000],huiwen[100]; int i; int n=1,c=0; int d=i*i; for(int i=300;i<1000;i++){ if(d>=100000&&d<1000000) for(n=0;n<1000;n++){ arr[n]=d; while ( inv(int d)=d) huiwen[c]=d; c++; } } printf("%d",arr[1000]); printf("%d,huiwen[100]"); } return 0; }
时间: 2024-03-02 10:52:49 浏览: 122
c代码-一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
这段代码存在几个问题:
1. 变量d是在for循环外部定义的,但是在循环内部使用,这样会导致d的值没有更新,程序无法正确运行。
2. 函数inv的实现方式不正确,应该要先计算出每一位数字再进行反转。
3. 在while循环中,条件判断语句应该使用==而不是=,因为=是赋值操作。
4. 数组arr和huiwen的大小都是1000,但是实际上只需要存储满足条件的数,所以应该根据实际需要调整数组大小。
下面是修正后的代码:
```c
#include <stdio.h>
#include <math.h>
int inv(int a){
int b = 0;
while (a > 0){
b = b * 10 + a % 10;
a /= 10;
}
return b;
}
int main(){
int huiwen[100], c = 0;
for(int i = 300; i < 1000; i++){
int d = i * i;
if(d >= 100000 && d < 1000000 && d == inv(d)){
huiwen[c++] = d;
}
}
for(int i = 0; i < c; i++){
printf("%d ", huiwen[i]);
}
return 0;
}
```
这段代码能够找出所有满足条件的6位整数,并且输出这些数。
阅读全文