栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

这才是真正的C++分解质因数!被坑了很久……(有教程,中间有半成品)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

这才是真正的C++分解质因数!被坑了很久……(有教程,中间有半成品)

网上有很多分解质因数的C++源代码,有人说是这样写的:

#define _CRT_SECU
#include
using namespace std;
int main()
{
    long long input;
    while(1)
    {
    cout<<"输入一个数:";
    scanf("%d",&input);
    printf("%d=",input);
    for(long long i=2;i<=input;i++)
    {
        while(input%i == 0)
        {
            printf("%d",i);
            input/=i;
            if(input % i == 0)
            {
            input/=i;
            if(input != 1)
            {
                cout<<"*";
            }
            } 
        }
    }     
    cout< 

明显没有进行实践,完全没考虑周全!运行结果如下:

为了真实性,我重新编辑一下,10天后,谜题终于揭开了……

首先我们加入死循环(也可以不用),声明变量“input、s、a”,输出程序提示,程序如下:

#include
using namespace std;
int main() 
{
	long long input,s=2,a=0;
	while(1) 
	{
        s=2,a=0;
		cout<<"输入一个数(分解质因数,范围:2~2147483646):"; 
    }

继续,使用输入输出流,输入到input,判断输入数据是否正确。先输出变量input和"=",再使用for循环;程序如下:

#include
using namespace std;
int main() 
{
	long long input,s=2,a=0;
	while(1) 
	{
		s=2,a=0;
		cout<<"输入一个数(分解质因数,范围:2~2147483646):"; 
		scanf("%d",&input);
        if(input >= 2 )
        {
		    printf("%d=",input);
		    for(long long i=2; i<=input; i++) 
		    {
             
            }
        }
    }
}

(注意格式)我们想:质因数是不是一定被原来的数除尽?那么得有一个while循环判断input%i==0,如9果是将输出i,程序如下:

#include
using namespace std;
int main() 
{
	long long input,s=2,a=0;
	while(1) 
	{
		s=2,a=0;
		cout<<"输入一个数(分解质因数,范围:2~2147483646):"; 
		scanf("%d",&input);
        if(input >= 2 )
        {
		    printf("%d=",input);
		    for(long long i=2; i<=input; i++) 
		    {
                while(input%i == 0) 
			    {
				    printf("%d",i);
                }
            }
        }
    }
}

我们将i赋值给a(a相当于一个临时变量),判断i是不是质数,先判断a是不是>=2,再判断s是不是a的因数,也就是a%s == 0 ,程序如下:

#include
using namespace std;
int main() 
{
	long long input,s=2,a=0;
	while(1) 
	{
		s=2,a=0;
		cout<<"输入一个数(分解质因数,范围:2~2147483646):"; 
		scanf("%d",&input);
        if(input >= 2 )
        {
		    printf("%d=",input);
		    for(long long i=2; i<=input; i++) 
		    {
                while(input%i == 0) 
			    {
				    printf("%d",i);
                    a=i;
				    if(a>=2)
     			    {
	    				while(a%s != 0 && a>s)
		    			{
			    			s=s+1;
			    		}
				    	if(s == a)
					    {
						    if(input % i == 0) 
	    					{
                            
                            }
                        }
                    }
                }
            }
       }
    }
}

确定i是input的质因数,我们除以i,如果还没有除尽(input不等于1),我们就连接一个乘号,循环完之后,我们换行,进行下一次分解,完成的程序如下(成品!!!!!!!):

#include
using namespace std;
int main() 
{
	long long input,s=2,a=0;
	while(1) 
	{
		s=2,a=0;
		cout<<"输入一个数(分解质因数,范围:2~2147483646):"; 
		scanf("%d",&input);
		if(input >= 2) 
		{
			printf("%d=",input);
	    	for(long long i=2; i<=input; i++) 
	    	{
    			while(input%i == 0) 
    			{
    				printf("%d",i);
    				a=i;
    				if(a>=2)
    			    {
    					while(a%s != 0 && a>s)
    					{
    						s=s+1;
    					}
    					if(s == a)
    					{
    						if(input % i == 0) 
    						{
    							input/=i;
    							if(input != 1) 
    							{
    								cout<<"×";
    							}
    						}
    					}
    				}
    			}
    		}
		cout< 

运行效果:

(关注我,点个赞,学习更多信息技术知识!)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1027183.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号