小开带你学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;
}
函数里的代码,和原先的代码,并没有太大区别,但因为它被封装成了一个函数,我们就可以随意的移植它。
那么上次的质数问题就可以变成这样:
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)==false) cout<<"合数"<<endl;
else cout<<"质数"<<endl;
return 0;
}
接下来我们来看一下质数问题的拓展。这是一个分解质因数的程序,先上代码:
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 函数初步和分解质因数问题的主要内容,如果未能解决你的问题,请参考以下文章