• 整数分解 && 质因数分解


    输入整数(0-30)分解成所有整数之和。每四行换行一次。

    一种方法是通过深度优先枚举出解。通过递归的方式来实现。

    #include <stdio.h>
    #include <string.h>
    #define MAXN 30
    #define MAXString 64
    int Terms[MAXN];
    int N;
    int Count;
    
    void Search(int Remainder,int Start,int nTerm)
    {
        int i;
        if(Remainder ==0 ){
            Count++;
            if(Count%4!=1)
                printf(";");
            printf("%d=%d",N,Terms[0]);
            for(i=1;i<nTerm;i++)
                printf("+%d",Terms[i]);
            if(Count%4==0)
                printf("
    ");
        }
        else
        {
            for(i=Start;i<=Remainder;i++){
                Terms[nTerm]=i;
                Search(Remainder-i,i,nTerm+1);
    
            }
        }
    }
    void Test1()
    {
        scanf("%d",&N);
        Count=0;
        Search(N,1,0);
        
        if(Count%4!=0)
            printf("
    ");
    }
    void Search1(int Remainder, int Start,char *STerms)
    {
        int i;
        char Tmps[MAXString];
        strcpy(Tmps,STerms);
        for(i=Start;i<=Remainder;i++)
        {
            if(Remainder-i>=i)
            {
                sprintf(Tmps+strlen(STerms),"%d+",i);
                Search1(Remainder-i,i,Tmps);
    
            }else if(Remainder-i==0)
            {
                sprintf(Tmps+strlen(STerms),"%d ",i);
                Count++;
                if(Count%4!=1)
                    printf(";");
                printf("%s",Tmps);
                if(Count%4==0)
                    printf("
    ");
            
            }
        
        }
    }
    void Test2()
    {
        char STerms[MAXString]="";
        int N;
        Count=0;
        scanf("%d",&N);
        Search1(N,1,STerms);
        if(Count%4!=0)
            printf("
    ");
    
    }

    第二种方法是试探下一次是否达到边界,避免了第一种方法的多次无效递归。

    质因数分解,输入大整数long int并分解其为素数的乘积

    //整数分解成素因子
    void Decomposed(long int data){
    	
    	int i;
    	int si=0;
    	int temp=data;
    	for(i=2;i<=temp;i++){
    		if(temp!=i)
    		{
    			while(true){
    				if(temp%i==0 && temp/i!=1){
    					printf("%d*",i);
    					temp/=i;
    					//printf("temp=%d,i=%d
    ",temp,i);
    				}else if(temp%i==0 && temp/i==1){
    					printf("%d",i);
    					temp/=i;
    					//printf("temp=%d,i=%d
    ",temp,i);
    				}
    				else
    					break;
    			}
    		}else{
    			printf("%d
    ",i);	
    			si=1;
    		}
    		
    	}
    	if(si==0)
    		printf("
    ");	
    
    
    }
    
    void TestDecomposed(){
    	long int x=1000234;
    	printf("%ld=",x);
    	Decomposed(x);
    }
    

      

  • 相关阅读:
    (三)xpath爬取4K高清美女壁纸
    聚焦爬虫:数据解析
    (二)requests-爬取国家药监局生产许可证数据
    (一)requests-实战小练习
    requests模块
    spring+apache dbcp +oracle 连接池配置以及优化
    IntelliJ IDEA 注释模版 输入/**后 不显示配置好的模板
    oracle 隔离级别、事务怎么开始的以及如何查看数据库采用字符集
    java 日期处理相关
    Oracle 插入数据时获取系统时间
  • 原文地址:https://www.cnblogs.com/chentingk/p/5371539.html
Copyright © 2020-2023  润新知