作业帮 > 综合 > 作业

c++程序:输入一个大整数n然后利用循环搜索k,使得3 k < =n < 3 k+1 输出整数k

来源:学生作业帮 编辑:灵鹊做题网作业帮 分类:综合作业 时间:2024/04/28 00:28:35
c++程序:输入一个大整数n然后利用循环搜索k,使得3 k < =n < 3 k+1 输出整数k
内容:


输入一个大整数n然后利用循环搜索k,使得3 k < =n < 3 k+1
输出整数k

输入说明:


一行一个整数n


输出说明:


一行一个整数



输入样例:


21



输出样例



2

我的程序是这样的:#include
#include
#include
#include
using namespace std;
int main()
{
long long a,k,sum=3;
cin>>a;
for (k=1;;k++)
{
sum=sum*3;
{
if (sum>=a)
{
cout
c++程序:输入一个大整数n然后利用循环搜索k,使得3 k < =n < 3 k+1 输出整数k
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;

class bint
{
    string numb;
public:
    bint() {}
    bint(int x)
    {
        while(x)
        {
            numb.push_back(x % 10);
            x /= 10;
        }
    }
    void push_back(int x)
    {
        numb.push_back(x);
    }
    int length() const
    {
        return numb.length();
    }
    char& operator[](int x)
    {
        return numb[x];
    }
    void resize(int x)
    {
        numb.resize(x);
    }
    void clear()
    {
        numb.clear();
    }
    friend bint operator*(bint &a, bint &b)
    {
        if (!a.length() || !b.length())
            return bint(0);
        bint c;
        for (int i = 0, sa = a.length(); i<sa; i++)
        {
            for (int j = 0, sb = b.length(); j<sb; j++)
            {
                if (i + j == c.length())
                {
                    c.push_back(a[i] * b[j]);
                }
                else
                {
                    c[i + j] += a[i] * b[j];
                }
            }
        }
        int last = 0;
        for (int i = 0, sc = c.length(); i < sc; i++)
        {
            c[i] += last;
            last = c[i] / 10;
            c[i] %= 10;
        }
        while (last)
        {
            c.push_back(last % 10);
            last /= 10;
        }
        return c;
    }
    friend istream& operator>>(istream &in, bint &a)
    {
        a.clear();
        string s;
        in>>s;
        for (int i = s.length() - 1; i >=0 ; i--)
        {
            a.push_back(s[i] - '0');
        }
        for (int i = a.length() - 1;; i--)
        {
            if (i == -1)
            {
                a.clear();
                break;
            }
            if (a[i] != 0)
            {
                a.resize(i + 1);
                break;
            }
        }
        return in;
    }
    string toString() const
    {
        if (!length())
            return "0";
        string s;
        for (int i = numb.length() - 1; i >=0 ; i--)
        {
            s.push_back(numb[i] + '0');
        }
        return s;
    }
    friend ostream& operator<<(ostream &out, const bint &a)
    {
        out<<a.toString();
        return out;
    }
    friend bool operator>(const bint&a, const bint &b)
    {
        if (a.length() > b.length())
            return true;
        if (a.length() < b.length())
            return false;
        return a.toString() > b.toString();
    }
};

int run()//大数类型的情况,如果真的是大数,把run改名为main就好了.
{
    bint a;
    while(cin>>a)
    {
        bint sum = 1, _3 = 3;//sum应该从1开始
        for(int k = 1;; k++)
        {
            sum = sum * _3;
            if (sum > a)//这里应该是严格大于号
            {
                cout<<k - 1<<endl;//输出k-1
                break;
            }
        }
    }
    return 0;
}

int main()//普通的情况
{
    long long a;
    while(cin>>a)
    {
        long long sum = 1, _3 = 3;//sum应该从1开始
        for(int k = 1;; k++)
        {
            sum = sum * _3;
            if (sum > a)//这里应该是严格大于号
            {
                cout<<k - 1<<endl;//输出k-1
                break;
            }
        }
    }
    return 0;
} 题目说的是大数n,真正的大数就是用long long也存储不下的数了.