大整数问题

简介:
题目描述:有一个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,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
C++
3 的幂(C++)
3 的幂(C++)
37 0
|
2月前
大整数的因子(利用求余)
大整数的因子(利用求余)
|
2月前
|
C++
2 的幂(C++)
2 的幂(C++)
29 1
|
12月前
1169:大整数减法
1169:大整数减法
|
2月前
大整数加法_大整数减法
大整数加法_大整数减法
|
10月前
|
存储 C++
求2的N次幂(C++)解决高精度运算
求2的N次幂(C++)解决高精度运算
156 0
|
12月前
|
存储 C++
大整数运算(高精度运算)C/C++
大整数运算(高精度运算)C/C++
187 0
|
算法 测试技术 C++
基于C++实现的大整数计算
基于C++实现的大整数计算
125 0
基于C++实现的大整数计算
35.数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方
39 0
35.数值的整数次方

热门文章

最新文章