哪位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;
}
谢谢~~~ 展开
#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;
}
谢谢~~~ 展开
5个回答
展开全部
#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;
}
#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;
}
展开全部
第一,数据类型定义错误,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;
}
有什么问题再联系我。
第二,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;
}
有什么问题再联系我。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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
分别找自守数。
#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
分别找自守数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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
分别找自守数。
#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
分别找自守数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一:wei函数里面的result没有初值
第二:zi函数里面的返回类型应该是bool型的吧
第三:p/pow(10,m)是什么意思
第四:我看了半天也不知道什么是自守数
我修改了半天还是有错误,都是p/pow(10,m)引起的。
p/pow(10,m)是系统自带的函数吗?你用的是哪个版本的c++?
第二:zi函数里面的返回类型应该是bool型的吧
第三:p/pow(10,m)是什么意思
第四:我看了半天也不知道什么是自守数
我修改了半天还是有错误,都是p/pow(10,m)引起的。
p/pow(10,m)是系统自带的函数吗?你用的是哪个版本的c++?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询