大整数问题

题目描述:有一个k(1≤k≤80)位的十进制正整数n,设计一个程序,找到满足条件:P3+ P2+3P≤nP的最大值。

测试用例:

输入:

1000000000000001000000000000003000000000000001

输出:

100000000000000

复制代码
#include <iostream>
#include 
<string>
using namespace std;
#include 
"decnum.h"

decnum n,p;
int k;
char succ(char num)
{
//后继数字
    if (num=='9')
    {
        num 
= '0';
    }
    
else
        
++num;
    
return num;
}
char pred(char num)
{
//前一个数字
    return --num;
}
bool IsOk(const char* temp,int size)
{
//判断是否当前值符合条件
    decnum num(temp,size);
    decnum sum 
= pow(num, 3)+pow(num,2)+(num*3);
    
if (sum>n)
    {
//太大了
        return false;
    }
    
return true;
}

void search()
{
    
char* temp = new char[k];
    
int i;
    
//初始化都是0
    for (i=0;i<k;++i)
    {
        temp[i] 
= '0';
    }
    temp[i] 
= '\0';
    
for (i=0;i<k;++i)
    {
        
do
        {
            
//尝试这一位
            temp[i] = succ(temp[i]);
            
if (temp[i]=='0')
            {
//此位置从0到9都尝试过了
                break;
            }
        }
        
while(IsOk(temp,k));
        
//回退到前一位合法值
        temp[i] = pred(temp[i]);
    }
    
//输出结果
    p = decnum(temp,k);
    cout
<<p<<endl;
}
int main()
{
    
string line;
    getline(cin,line);
    n 
= decnum(line.c_str(), line.length());
    k 
= line.length();//位数
    search();
    cout
<<n<<endl;
    
return 0;
}
复制代码

本文使用的大数类请参见一个大数运算类》这篇文章

posted on   Phinecos(洞庭散人)  阅读(841)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2007-11-17 一个COM示例程序
2007-11-17 一个模拟的COM示例程序

导航

统计

点击右上角即可分享
微信分享提示