zoukankan      html  css  js  c++  java
  • ybt1210 因子分解

    ybt1210 因子分解

    【题目描述】

    输入一个数,输出其素因子分解表达式。

    【输入】

    输入一个整数 n (2≤n<100)。

    【输出】

    输出该整数的因子分解表达式。

    表达式中各个素数从小到大排列。

    如果该整数可以分解出因子a的b次方,当b大于1时,写做 a^b ;当b等于1时,则直接写成a。

    【输入样例】

    60
    

    【输出样例】

    2^2*3*5
    

    【题解】

    因数分解和最大公因数不同,这里要使用比n小的数反复除以n,直到n为零为止。

    再出的过程中,还要记录每个因数的出现次数,这样才可以用指数的方式输出表达式。

    (由于算法过于无脑,所以其余内容将在注释中呈现)

    #include<iostream>
    #include<cmath>
    #include<cstring>
    using namespace std;
    int a,i=2,ans[105],n;//i是除数,从2开始
    bool bj=0;//输出时的标记,保证一开始第一个因数前面没有乘号
    int main() {
    	cin>>n;
    	a=n;//由于n的值在输出时还要调用,所以用a来暂时存储n的值
    	memset(ans,0,sizeof(ans));//清空数组
    	while(a>1&&a>=i) {
    		if(!(a%i)) {//如果i为a的因数
    			ans[i]++;//i的指数增加
    			a/=i;//a的更新
    			//cout<<i<<" "<<ans[i]<<endl;//调试用
    		}
    		else
    			i++;//i不能被整除,继续试接下来的i
    	}
    	for(int j=2;j<=n;j++){
    		if(ans[j]) {//j的指数不为零
    			if(bj)//在此之前有因数,所以输出乘号
    				cout<<"*";
    			if(ans[j]==1)//如果指数为1,那么直接输出因数
    				cout<<j;
    			else {
    				cout<<j<<"^"<<ans[j];//指数大于1,输出底数加指数
    			}
    			bj=1;//已经有因数被输出,打标记
    		}
    	}
    	cout<<endl;//最后换行
    	return 0;
    }
    
    
  • 相关阅读:
    HTML
    数据库
    EF增删查改(三)------终极版
    三层的之间的引用
    sql:PostgreSQL
    csharp:SQLite and Access using C# code read data
    sql:Mysql create view,function,procedure
    sql: MySQL and Microsoft SQL Server Stored Procedures IN, OUT using csharp code
    Working C# code for MySql5.5 Stored Procedures IN parameters
    csharp:search and Compare string
  • 原文地址:https://www.cnblogs.com/Wild-Donkey/p/12231588.html
Copyright © 2011-2022 走看看