c++程序:输入一个大整数n然后利用循环搜索k,使得3 k < =n < 3 k+1 输出整数k内容: 输入一个大整数n然后利用循环搜索k,使得3 k < =n < 3 k+1输出整数k 输入说明: 一行一个整数n 输出
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/25 19:21:04
c++程序:输入一个大整数n然后利用循环搜索k,使得3 k < =n < 3 k+1 输出整数k内容: 输入一个大整数n然后利用循环搜索k,使得3 k < =n < 3 k+1输出整数k 输入说明: 一行一个整数n 输出
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内容: 输入一个大整数n然后利用循环搜索k,使得3 k < =n < 3 k+1输出整数k 输入说明: 一行一个整数n 输出
#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也存储不下的数了.