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

我是C++初学者。编了一个求一定范围内的所有自守数的C++程序,但是运行后总有问题,哪位高手帮我指出错误??不胜感激!!!#include<iostream.h>#inc... 我是C++初学者。编了一个求一定范围内的所有自守数的C++程序,但是运行后总有问题,哪位高手帮我指出错误??不胜感激!!!

#include<iostream.h>
#include<math.h>

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

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

double main()
{
cout<<"请输入小于200000的一个范围,a<b"<<endl; //限定范围
cout<<"a=";
double a;
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(double zi(i))cout<<i;
}
cout<<i;
return 0;
}

谢谢~~~
展开
 我来答
二美知1G
推荐于2016-10-16 · TA获得超过273个赞
知道小有建树答主
回答量:213
采纳率:0%
帮助的人:94.1万
展开全部
#include<iostream.h>
#include<math.h>

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的一个范围,a<b"<<endl; //限定范围
cout<<"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<<i<<endl;
}
// cout<<i;
return 0;
}
阝东亻韦
2009-04-09 · TA获得超过171个赞
知道答主
回答量:69
采纳率:0%
帮助的人:87.3万
展开全部
第一,数据类型定义错误,double是定义小数的,应为long。
第二,p/pow(10,m)应用错误,应进行求余运算。
下面是我改的程序,编译已通过:
#include<iostream>
#include<math.h>
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的一个范围,a<b"<<endl; //限定范围
cout<<"a=";
int a;
cin>>a;
cout<<"b=";
int b;
cin>>b;
int i;
for(i=a;i<=b;i++)
{
if(zi(i))
cout<<i<<"\t";
}
cout<<endl;
return 0;
}

有什么问题再联系我。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Ynzsvt
2009-04-06 · TA获得超过6664个赞
知道大有可为答主
回答量:1.5万
采纳率:40%
帮助的人:2673万
展开全部
#include<iostream.h>
#include<math.h>

#define true -1
#define false 0

int wei(int m) //判断位数
{
int n;
int result;
for(n=5;n>=0;n--){
int a=m<pow(10,n);
if(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的一个范围,a<b"<<endl; //限定范围
cout<<"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<<i;cout<<" ";}
}
//cout<<i;
return 0;
}

注意:少了0625这个自守数。故位数要用输入的。
即:
1位数,2~9
2位数,2~99
3位数,2~999
4位数,2~9999
5位数,2~99999
分别找自守数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ppplllaaay
2009-04-09 · TA获得超过110个赞
知道小有建树答主
回答量:135
采纳率:100%
帮助的人:71.5万
展开全部
#include<iostream.h>
#include<math.h>

#define true -1
#define false 0

int wei(int m) //判断位数
{
int n;
int result;
for(n=5;n>=0;n--){
int a=m<pow(10,n);
if(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的一个范围,a<b"<<endl; //限定范围
cout<<"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<<i;cout<<" ";}
}
//cout<<i;
return 0;
}

自守数是这样的:
1位数,2~9
2位数,2~99
3位数,2~999
4位数,2~9999
5位数,2~99999
分别找自守数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
剑起飞虹
2009-04-06
知道答主
回答量:31
采纳率:0%
帮助的人:5.1万
展开全部
第一:wei函数里面的result没有初值
第二:zi函数里面的返回类型应该是bool型的吧
第三:p/pow(10,m)是什么意思
第四:我看了半天也不知道什么是自守数
我修改了半天还是有错误,都是p/pow(10,m)引起的。
p/pow(10,m)是系统自带的函数吗?你用的是哪个版本的c++?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式