小开带你学C++ | Lesson 11 函数初步和分解质因数问题

Posted 小开讲科技

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小开带你学C++ | Lesson 11 函数初步和分解质因数问题相关的知识,希望对你有一定的参考价值。

大家好,我是小开,我们的C++系列又回来啦~


上一次我们解决了质数问题,并讲解了函数的初步内容。这一次,让我们来试着用函数把判断质数的代码封装起来。


解决这个问题之前,我们需要了解一种新的类型的变量:bool。


布尔型变量,有别于整型变量,只有真(true)和假(false)两种情况。


定义布尔型变量可以这样定义:


bool a=true;


好了,接下来,我们就可以开始把判断质数的模块封装到函数里去了。


先看代码:


bool judge(int x){ int i=2;    while((i<=sqrt(x))&&(x%i!=0)) i++;    if(n%i==0) return false;    else return true;       }


函数里的代码,和原先的代码,并没有太大区别,但因为它被封装成了一个函数,我们就可以随意的移植它。


那么上次的质数问题就可以变成这样:


#include<cstdio>#include<cstdlib>#include<iostream>#include<cmath> //sqrt等数学运算需要这个头文件 using namespace std;bool judge(int x){ int i=2; while((i<=sqrt(x))&&(x%i!=0)) i++; if(n%i==0) return false; else return true; }int main(){ int n,i=2;  scanf("%d",&n);  //输入要判断的数     if(judge(n)==falsecout<<"合数"<<endl; else cout<<"质数"<<endl; return 0;}


接下来我们来看一下质数问题的拓展。这是一个分解质因数的程序,先上代码:


#include"cstdio"#include"cstdlib"#include"iostream"using namespace std;int main(){  int n,i=2; cin>>n; printf("%d=",n); do { while(n%i==0) { printf("%d",i); n/=i; if(n!=1) printf("*"); } i++; } while(n!=1); cout<<endl; return 0;}


最主要的,其实就是主函数里的do-while循环和里面的循环嵌套:


 do { while(n%i==0) { printf("%d",i); n/=i; if(n!=1) printf("*"); } i++; } while(n!=1);


首先,我们在自己手动分解质因数,一般是先从2开始除,当不再有2的时候,就+1,开始除以3,以此类推。


在这个过程中,其实我们不用考虑除的数是不是质数——如果它是一个合数,那么组成它的质数肯定已经被除掉了,这个合数就不可能是已经被除了几次的原数的约数了。


程序也是类似,只是把它用代码表达出来而已。


do {    while(n%i==0)  //确保能整除 {      printf("%d",i);  //打印出来      n/=i;  //把原数除掉      if(n!=1)  //没除完就继续 printf("*"); }    i++;//下一个数 }  while(n!=1);//只要原数仍然还能除


好啦,今天的课就到这里,我们下次再见~

以上是关于小开带你学C++ | Lesson 11 函数初步和分解质因数问题的主要内容,如果未能解决你的问题,请参考以下文章

老杜带你学MySQL学习系列内容汇总

《带你学C带你飞》---指针和数组

❤️ 珊姐带你学JavaScript:数组和函数 (万文建藏)❤️

Carson带你学Java:关于String类的必知必会!

松软科技带你学前端:JavaScript 输出

初步认识c++之命名空间详解(千字长文带你刨析你命名空间的细节)