哪位C++高手帮我看一下这个求自守数的程序有什么问题??不胜感激

2024-12-18 10:50:03
推荐回答(5个)
回答1:

#include
#include

int wei(long m) //判断位数
{
int n;
int result = 0;
/运租谨*for(n=5;n>=1;n--){
int a=m/pow(10,n);
if(a!=0)int result=n+1;
} */

while ( m != 0)
{
result++;
m /= 10;
}
return result;
}

bool zi(long z) //判断是否是自守数
{
int m=wei(z);
long r=z*z;
long p=1;

for (int i = 1; i <= m; ++i)
{
p *= 10;
}
if( r%p == z){
return true;
}
else{
return false;
}
}

int main()
{
cout<旁基<"请输入型吵小于200000的一个范围,acout<<"a=";
long a;
cin>>a;

cout<<"b=";
long b;
cin>>b;

/*double m=wei(a);
double n=wei(b); */
long i;
for(i=a;i<=b;i++){ //判断哪些数是自守数
if( zi(i) && i != 0 && i != 1)cout<}
// cout<return 0;
}

回答2:

第一,数据类型定义错误,double是定义小数的,应败帆为long。
第二,p/pow(10,m)应用错误,应进行求余运算。
下面是我改的程序,编译已通过:
#include
#include
using namespace std;
int wei(int m) //判断位数
{
int n,a;
int result;
for(n=5;n>=0;n--)
{
a=m/(pow(10,n));
if(a!=0)
{
result=n+1;
break;
}
}
return result;
}

int zi(int z) //察拿雹判断是否是自守数
{
int m=wei(z);
long r=z*z;
long p=r-z;
int f=pow(10,m);
if(p%f==0)
return 1;
else
return 0;
}

int main()
{
cout<<"请敏友输入小于200000的一个范围,acout<<"a=";
int a;
cin>>a;
cout<<"b=";
int b;
cin>>b;
int i;
for(i=a;i<=b;i++)
{
if(zi(i))
cout<}
cout<return 0;
}

有什么问题再联系我。

回答3:

#include
#include

#define true -1
#define false 0

int wei(int m) //判断位数
{
int n;
int result;
for(n=5;n>=0;n--){
int a=mif(a!=0)result=n;
}
return result;
}

double zi(double z) //判断是否是自守数
{
double m=wei(z);
double r=z*z;
double p=r-z;
if(int(p/pow(10,m))*pow(10.,m)==p){
return true;
}
else{
return false;
}
}

double main()
{
cout<<"请输或含入小于200000的一个范围,acout<<"a=";
double a;
a=zi(11);
cin>>a;
cout<<"b=";
double b;
cin>>b;
double m=wei(a);
double n=wei(b);
double i;
for(i=a;i<=b;i++){ //判断哪些数是自守数
if(true==zi(i)){cout<}
//cout<return 0;
}

注意:少了0625这个自守数。故位数要用输入的。
即:
1位衫余笑数,2~9
2位数,2~99
3位数,毁链2~999
4位数,2~9999
5位数,2~99999
分别找自守数。

回答4:

#include
#include

#define true -1
#define false 0

int wei(int m) //判断位数
{
int n;
int result;
for(n=5;n>=0;n--){
int a=mif(a!=0)result=n;
}
return result;
}

double zi(double z) //判断是否是自守数
{
double m=wei(z);
double r=z*z;
double p=r-z;
if(int(p/pow(10,m))*pow(10.,m)==p){
return true;
}
else{
return false;
}
}

double main()
{
cout<<"请输入悄笑小于200000的一个范围,acout<<"a=";
double a;
a=zi(11);
cin>>陆型a;
cout<<"b=";
double b;
cin>>b;
double m=wei(a);
double n=wei(b);
double i;
for(i=a;i<=b;i++){ //少了0625这个自守数。故位数要用输入的。
if(true==zi(i)){cout<}
//cout<return 0;
}

自守数是这样的:
1位数,2~9
2位数早运猜,2~99
3位数,2~999
4位数,2~9999
5位数,2~99999
分别找自守数。

回答5:

第一:wei函数里面的result没有初值
第二:zi函数里面的返脊羡洞回类型应该是bool型的吧
第三:p/pow(10,m)是什么意思
第四:我看了樱枯半天也不知道什么是自守数
我修改了半天还是有错误,都是派兄p/pow(10,m)引起的。
p/pow(10,m)是系统自带的函数吗?你用的是哪个版本的c++?