2 条题解

  • 3
    @ 2022-7-26 22:57:51
    #include <iostream>
    using namespace std;
    long long n;
    int main() {
    	cin >> n;
    	cout << n << "=";                       //先输出个n=
    	if(n == 1) {
    		cout << 1 << endl;                  //加个特判1=1
    		return 0;
    	}
    	bool flag = false;                      //判断是否需要加*号的变量
    	for(int i = 2; ;i++) {
    		if(n == 1) {                        //结束条件
    			break;
    		}
    		long long num = 0;                  //存储幂的变量(i的num次方)
    		while(n % i == 0) {                 //枚举出他能被多少个i除以
    			num++;
    			n /= i;
    		}
    		if(num == 0) {                      //这个数不能除以n(n % i == 0)
    			continue;
    		}
    		if(flag) {
    			cout << "*";                    //输出*号
    		} else {
    			flag = true;                    //没输出*说明这是第一个i^num,下一个要输出了,将判断是否输出*好的变量设为输出(true为输出,false为不输出)
    		}
    		if(num > 1) {
    			cout << i << "^" << num;        //判断num是否不为1,如果不为1则输出i^num
    			continue;
    		}
    		cout << i;                          //num为1的情况直接输出i
    	}
    	return 0;
    }
    • 0
      @ 2024-3-20 22:13:28
      #include <bits/stdc++.h>
      using namespace std;
      int n,ma;
      map<int,int>m;
      int main(){
      	ios::sync_with_stdio(false);
      	cin.tie(0);cout.tie(0);
      	cin>>n;
      	cout<<n<<"=";
      	if (n==1){
      		cout<<1;
      		return 0;
      	}
      	for (int i=2;i<=sqrt(n);i++){
      		while (n%i==0){
      			m[i]++;
      			n/=i;
      			ma=i;
      		}
      	}
      	if (n>1){
      		m[n]++;
      		ma=n;
      	}
      	for (const auto&it:m){
      		cout<<it.first;
      		if (it.second>1)cout<<"^"<<it.second; 
      		if (it.first!=ma)cout<<"*";
      	}
      	return 0;
      }
      
      • 1

      信息

      ID
      1136
      时间
      1000ms
      内存
      128MiB
      难度
      6
      标签
      递交数
      191
      已通过
      66
      上传者