模拟与高精度:最大乘积

简介: 模拟与高精度:最大乘积

题目描述

一个正整数一般可以分为几个互不相同的自然数的和,如 3=1+2,4=1+35,=1+4=2+3,6=1+5=2+4。现在你的任务是将指定的正整数 nn 分解成若干个互不相同的自然数的和,且使这些自然数的乘积最大。

输入格式  只一个正整数 n,(3≤n≤10000)。

输出格式第一行是分解方案,相邻的数之间用一个空格分开,并且按由小到大的顺序。第二行是最大的乘积。

输入输出样例

输入

10


输出

2 3 5

30

#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
typedef long long ll;
int n,a[1000],t;
struct bn{
  int len;
  int d[10000];
  bn() {
    memset(d, 0, sizeof(d));
    len = 0;
  }
};
bn mul(bn a, int b) {
  int carry = 0;
  bign res;
  for(int i = 0; i < a.len; i++) {
    int tem = a.d[i] * b + carry;
    res.d[res.len++] = tem % 10;
    carry = tem / 10;
  }
  while(carry) {
    res.d[res.len++] = carry % 10;
    carry /= 10;
  }
  while(res.len > 1 && res.d[res.len - 1] == 0) res.len--;
  return res;
}
void output(bn ans) {
  for(int i = ans.len - 1; i >= 0; i--)
    cout << ans.d[i];
  cout << endl;
}
int main() {
  cin >> n;
  if(n < 5) {
    cout << n;
    return 0;
  }
  int id = 2, sum = 0;
  while(n) {
    a[t++] = id;
    sum += id++;
    if(sum == n)
      break;
    if(sum > n) {
      if(sum == n + 1) {
        a[0] = 1;
        a[t - 1]++;
      }
      else {
        for(int i = 0; i < t; i++)
          if(a[i] == sum - n) {
            a[i] = 1;
            break;
          }
      }
      break;
    }
  }
  bn ans;
  ans.len = 1;
  ans.d[0] = 1;
  for(int i = 0; i < t; i++) {
    if(a[i] != 1)
      cout << a[i] << " ";
  }
  cout << endl;
  for(int i = 0; i < t; i++) {
    ans = mul(ans, a[i]);
  
  }
  output(ans);
  return 0;
}
目录
相关文章
|
缓存 监控 安全
Elasticsearch扩展和优化
【11月更文挑战第4天】
242 6
|
前端开发 JavaScript UED
Web组件化的优势和劣势
Web 组件化的优势明显大于劣势,并且通过合理的规划、设计和技术选型,可以有效克服劣势带来的影响。随着技术的不断发展和经验的积累,Web 组件化将在前端开发中发挥越来越重要的作用。
353 55
|
机器学习/深度学习 人工智能 搜索推荐
用AI技术打造个性化新闻推荐系统
【10月更文挑战第7天】本文将介绍如何使用AI技术构建一个个性化的新闻推荐系统。我们将从数据收集、处理,到模型训练和优化,最后实现推荐系统的全过程进行讲解。通过这篇文章,你将了解到如何利用机器学习和深度学习技术,为用户提供精准的新闻推荐。
425 0
|
网络协议 网络安全 数据处理
全球 IPv4 耗尽,下个月开始收费!
全球 IPv4 耗尽,下个月开始收费!
|
Web App开发 JavaScript 前端开发
深入理解前端跨域方法和原理
深入理解前端跨域方法和原理
227 0
|
XML 负载均衡 Java
Spring Cloud Alibaba学习笔记
Spring Cloud Alibaba学习笔记
|
SQL
SAP ABAP-OPENSQL-日期/时间戳函数
S4提供针对OPENSQL一些新的SQL函数调用,本文展示相关函数的使用
1286 0
|
存储 SQL 数据采集
数据仓库系列(四)数仓架构以及多维数据模型的设计1
数据仓库系列(四)数仓架构以及多维数据模型的设计1
933 0
数据仓库系列(四)数仓架构以及多维数据模型的设计1
|
数据安全/隐私保护 Android开发 容器
autojs之密码专用输入框
使用场景 密码输入框
1134 0
|
Java
JVM - 一篇带你读懂 Java GC 日志(附 GC 耗时讲解)
JVM - 一篇带你读懂 Java GC 日志(附 GC 耗时讲解)
1320 0
JVM - 一篇带你读懂 Java GC 日志(附 GC 耗时讲解)