这是我的第一篇产出!
求一个数字的位数,可以不断地%10并计数。
但是对于一个极大的数,高精度又受限制(我觉得不会有人喜欢写高精度的),怎么求位数呢?
3939这是一个四位数,我们换一个方法看这个数。
1.3939>10^0,即3939>1,3939至少有 (0+1) 位数
2.3939>10^1,即3939>10,3939至少有 (1+1) 位数
3.3939>10^2,即3939>100,3939至少有 (2+1) 位数
4.3939>10^3,即3939>1000,3939至少有 (3+1) 位数
5.3939<10^4,即3939<10000,3939有 (3+1) 位数
从上面的过程易得
对一个数x,它的位数为lg(x)+1
emmm是一个非常显而易见的结论呢..实战演练怎么样呢?
洛谷https://www.luogu.org/problem/show?pid=2759
题目描述
使得 x^x 达到或超过 n 位数字的最小正整数 x 是多少?
输入格式
一个正整数 n
输出格式:
使得 x^x 达到 n 位数字的最小正整数 x
输入样例#1:
11
输出样例#1:
10
说明
n<=2000000000
2后面是9个0,这个数多大炸不炸希望大家心里有数。
从0枚举x,希望不大,20分都是奇迹
蛮明显的是二分,但是怎么分呢这是个问题。
这个时候,我们刚刚得到的式子就显得尤为重要
对一个数x,它的位数为lg(x)+1
本题是x^x,那么位数就是
x*lg(x)+1
而且c的math已经有现成的log,log10了,我们可以直接拿来白嫖。
log10(double x)返回一个浮点数,后面的位数不需要,转成×××时会消掉。
#include#include using namespace std; long long int n,l=1,mid,r=(long long)3e9; int main()//x^x>=10(n-1) { ios::sync_with_stdio(false); cin>>n; while(l =n) r=mid; else l=mid+1; } cout< 3e9那里的(long long)让编译器闭嘴
非常朴素的二分...就这样了!大家快去把它A了吧,提高+/省选-哦!
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
标题名称:关于数的位数-创新互联
转载来源:http://cxhlcq.com/article/dcdeci.html