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 <iostream>
#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;

 

顺便把我运行的截图也给你看看

整个程序的截图也贴给你看看,编译完全没问题:

追问

编译错误

参考技术A

这感觉题目要求你用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++用面向对象的方法求阶乘的主要内容,如果未能解决你的问题,请参考以下文章

c++面向对象的主要体现是啥?

c++面向对象程序设计心得

殷人昆 数据结构 用面向对象方法与C++语言描述 第二版 课后题答案详解 完整版

面向对象程序设计方法概述

C++编程题 (面向对象程序设计)

c++ 面向对象的静态函数 多线程调用