大整数问题

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

测试用例:

输入:

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;
}
复制代码


本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2008/11/17/1335239.html,如需转载请自行联系原作者
目录
相关文章
|
6月前
大整数的因子(利用求余)
大整数的因子(利用求余)
|
6月前
大整数加法_大整数减法
大整数加法_大整数减法
|
存储 C++
大整数运算(高精度运算)C/C++
大整数运算(高精度运算)C/C++
255 0
|
算法 测试技术 C++
基于C++实现的大整数计算
基于C++实现的大整数计算
152 0
基于C++实现的大整数计算
35.数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方
50 0
35.数值的整数次方
|
前端开发 JavaScript 程序员
数值的整数次方
数值的整数次方
数值的整数次方
【3.整数与浮点数二分】
1.整数二分 >### 二分本质 >- 有单调性,一定可以二分 >- 二分的题目,不一定非要有单调性 >### 思路:分俩种情况,有俩种模板
109 0
【3.整数与浮点数二分】
F#大整数阶乘
在数学上,有时候需要计算阶乘,即n! = 1 * 2 * 3 * ... (n - 1) * n ,由于int类型的长度限制,当n比较大的时候,则n!可能就无法得出正确的计算结果。此时就需要用到大整数类型bigint。
762 0
F#大整数阶乘