C++用面向对象的方法求阶乘
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++用面向对象的方法求阶乘相关的知识,希望对你有一定的参考价值。
问题 A: 【类的设计】用面向对象的方法求阶乘【类与对象】
题目描述
定义一个接口,接口(Fun)中有以下三个抽象方法:
1.“long fact(int m);”方法的功能为求参数的阶乘。
2.“long intPower(int m, int
n);”方法的功能为求参数m的n次方。
3.“boolean findFactor(int m, int
n);”方法的功能为求参数m加上参数n的和是否大于30。
定义类(Method)实现该接口,调用接口中的三个方法,并将所得结果按格式输出。
此题不需要提供主程序,系统已提供主程序。
输入
输入有两个正整数,分别为m和n。
输出
输出有三行,第一行为m的阶乘所得的值。
第二行为m的n次方的值。
若m+n的值大于30,则第三行输出“true”,否则输出“false”。
样例输入
3 2
样例输出
6
9
false
#include <windows.h>
using namespace std;
//定义接口
class Fun
public:
Fun();
virtual ~Fun();
virtual long fact(int m)=0; //求参数的阶乘
virtual long intPower(int m,int n)=0; //求参数m的n次方
virtual boolean findFactor(int m,int n)=0; //求参数m加上参数n的和是否大于30
;
class Method:public Fun
public:
Method();
virtual ~Method()
long fact(int m)
long s=1;
if(m==0 || m==1)
return 1;
else if(m>1)
for(int i=1;i<=m;i++)
s *= i;
return s;
else
return -1;
long intPower(int m,int n)
long s=1;
if(n == 0)
return 1;
else if(n>0)
for(int j=1;j<=n;j++)
s *=m;
return s;
else
return -1;
boolean findFactor(int m,int n)
if((m+n)>30)
return true;
else
return false;
;
说明:用VC6.0现写的,自己写了个主函数测试,完全通过。追问
编译错误
追答是你说我不用写主程序的,看样子你自己不会写主程序进行测试,我还是把主程序贴出来吧
int main()
Method mm;
int a=6,b=3;
bool flag=mm.findFactor(a,b);
cout<<mm.fact(a)<<endl;
cout<<mm.intPower(a,b)<<endl;
if(flag==true)
cout<<a<<","<<b<<"的和大于30"<<endl;
else if(flag==false)
cout<<a<<","<<b<<"的和不大于30"<<endl;
return 0;
顺便把我运行的截图也给你看看
整个程序的截图也贴给你看看,编译完全没问题:
编译错误
这感觉题目要求你用Java写啊
// C++class Fun
public:
virtual long fact(int m) = 0;
virtual long intPower(int m, int n) = 0;
virtual bool findFactor(int m, int n) = 0;
;
class Method : public Fun
public:
long fact(int m)
long result = 1;
for (int i = 2; i <= m; i++)
result *= i;
return result;
long intPower(int m, int n)
long result = 1;
for (int i = 0; i < n; i++)
result *= m;
return result;
bool findFactor(int m, int n)
return m + n > 30;
;
// JAVA
import java.util.*;
import java.lang.*;
import java.io.*;
interface Fun
public long fact(int m);
public long intPower(int m, int n);
public boolean findFactor(int m, int n);
class Method implements Fun
public long fact(int m)
long result = 1;
for(int i=2;i<=m;i++)
result = result * i;
return result;
public long intPower(int m, int n)
long result = 1;
for(int i=0;i<n;i++)
result = result * m;
return result;
public boolean findFactor(int m, int n)
return m + n > 30;
class Main
public static void main (String[] args) throws java.lang.Exception
// your code goes here
Scanner cin = new Scanner(System.in);
int m = cin.nextInt();
int n = cin.nextInt();
Fun fun = new Method();
System.out.println(fun.fact(m));
System.out.println(fun.intPower(m,n));
System.out.println(fun.findFactor(m,n));
追问
一定要C++的,你上面那个我不知道怎么提交好。
追答// C++#include <iostream>
using namespace std;
class Fun
public:
virtual long fact(int m) = 0;
virtual long intPower(int m, int n) = 0;
virtual bool findFactor(int m, int n) = 0;
;
class Method : public Fun
public:
long fact(int m)
long result = 1;
for (int i = 2; i <= m; i++)
result *= i;
return result;
long intPower(int m, int n)
long result = 1;
for (int i = 0; i < n; i++)
result *= m;
return result;
bool findFactor(int m, int n)
return m + n > 30;
;
int main()
int n, m;
cin >> m >> n;
Method method;
cout << method.fact(m) << endl;
cout << method.intPower(m, n) << endl;
cout << (method.findFactor(m, n) ? "true" : "false") << endl;
参考技术B #include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;
class fun
public:
static long fact(int m);
static long intPower(int m, int n);
static bool findFactor(int m, int n);
;
long fun::fact(int m)
long ret=1;
for(int i=1;i<=m;++i)
ret *=i;
return ret;
long fun::intPower(int m, int n)
return pow(m,n);
bool fun::findFactor(int m, int n)
return m+n>30;
int main()
cout<<fun::fact(3)<<endl;
cout<<fun::intPower(3,2)<<endl;
cout<<boolalpha <<fun::findFactor(3,2)<<endl;
追问
错误80%
追答#include
#include
#include
using namespace std;
typedef boolboolean;
class fun
public:
static long fact(int m);
static long intPower(int m, int n);
static boolean findFactor(int m, int n);
;
long fun::fact(int m)
long ret=1;
for(int i=1;i30);
cout<<boolalpha <<ret<<endl;
return ret;
n的阶乘中用多少个2,3,5,7因数
举个例子,30的阶乘有多少个2因数,也就是有多少个2相乘用[n]表示不超过n的最大整数,例如[3.5]=3,[0.87]=0,[-4.55]=-5
30的阶乘中2的个数
=[30/2]+[30/2^2]+[30/2^3]+[30/2^4]
=15+7+3+1
=26
30的阶乘有26个2
这种算法可以用于对阶乘进行分解质因数。比如要计算100的阶乘等于多少,直接计算1乘2乘3一直乘到100,非常麻烦,数字也非常大。这时候就可以用这种算法直接去计算100的阶乘的质因数分解式 参考技术A 欢迎追问
3×5=15
能75
以上是关于C++用面向对象的方法求阶乘的主要内容,如果未能解决你的问题,请参考以下文章