C++ 查找1的总数

C++ 查找1的总数,c++,c,algorithm,data-structures,C++,C,Algorithm,Data Structures,给定一个数字N,找出pow(11,N)中存在的1的总数,其中1

给定一个数字
N
,找出
pow(11,N)
中存在的1的总数,其中
1
。使用基本方法解决这个问题将使我们陷入溢出问题,因为
N
可能非常大。我们有什么方法可以有效地解决这个问题?

这种事情是在桌面计算器
dc
中完成的。看看那里的bignum实现,或者只使用您最喜欢的bignum库(例如,GNU任意精度算术库)

确保您有足够的存储空间和CPU资源。观察内存使用和处理器时间如何在11^100000以上更快地增长:

$/usr/bin/time/tmp/countones 1000
105
0.00用户0.00系统0:00.00运行166%CPU(0avgtext+0avgdata 760maxresident)k
0输入+0输出(0主要+896分钟)页面故障0交换
$/usr/bin/time/tmp/countones 10000
1005
0.03用户0.00系统0:00.03运行102%CPU(0avgtext+0avgdata 756maxresident)k
0输入+0输出(0主要+906分钟)页面故障0交换
$/usr/bin/time/tmp/countones 100000
10190
1.12用户0.00系统0:01.12运行100%CPU(0avgtext+0avgdata 1144maxresident)k
0输入+0输出(0主要+1041minor)页面故障0交换
$/usr/bin/time/tmp/countones 1000000
104499
44.52用户0.01系统0:44.54运行100%CPU(0avgtext+0avgdata 5280maxresident)k
0输入+0输出(0主要+3992次要)页面故障0交换
我的快速脚本是

dc-e“11$1^p”| tr-d-c'1'| wc-c
请参见


乘以11等于乘以10(即在数字的右边加一个0)再加上原来的数字。使用此选项,您可以处理字符串,并且不需要额外的库。

@user1990169:但是使用1M,速度会太慢。您可以尝试,或者使用适合您环境的任何等效库。@KarolyHorvath Yes 11^1000000确实会慢哪种类型的“1”?你的意思是数字是以2为基数还是以10为基数?e、 g.十进制值11包含两个十进制的1s,但包含三个二进制的1s(1011)。看起来像是一个测试或家庭作业,但我看不到您的任何努力。到目前为止你都试了些什么?(1)如果你认为这是一个骗局,标记它,不要只是重新措辞骗局的答案。(2) 此解决方案需要O(n^2)时间,而且效率极低(召回行动数量高达1000000。将其平方将产生一个巨大的数字)。通过使用平方指数,使用库可以实现显著的改进。