鸽子洞/多个数字
pigeon hole / multiple numbers
input : integer ( i'll call it N ) and (1 <= N <= 5,000,000 )
output : integer, multiple of N and only contains 0,7
Ex.
Q1 input : 1 -> output : 7 ( 7 mod 1 == 0 )
Q2 input : 2 -> output : 70 ( 70 mod 2 == 0 )
#include <string>
#include <iostream>
using namespace std;
typedef long long ll;
int remaind(string num, ll m)
{
ll mod = 0;
for (int i = 0; i < num.size(); i++) {
int digit = num[i] - '0';
mod = mod * 10 + digit;
mod = mod % m;
}
return mod;
}
int main()
{
int n;
string ans;
cin >> n;
ans.append(n, '7');
for (int i = ans.length() - 1; i >= 0; i--)
{
if (remaind(ans, n) == 0)
{
cout << ans;
return 0;
}
ans.at(i) = '0';
}
return 0;
}
有没有办法减少时间的复杂性?
我只是非常努力地尝试了,当n超过1000000 时,运行需要多一点时间
ps。更改的代码ps2.由于代码错误,再次更改代码ps3.再次优化代码ps4.重写后
您的方法是错误的,假设您将"70"除以5。然后您的结果将是2,这是不对的(只需分析您的代码,看看为什么会发生这种情况(。
你真的可以根据77777770000000这样的数字进行搜索,但要更多地考虑这一点——哪些数字需要加零,哪些数字不需要。
接下来,不要使用字符串!如果你知道a的提醒和b的提醒,可以考虑a*b的提醒。当你编程它时,要小心整数大小,使用64位整数。
那么,a+b呢?
最后,找到数字10、100、1000、10000等的提醒(再次,不要使用字符串,仍然尝试找到10次方的提醒(。
好吧,如果你做到这一切,你就能轻而易举地解决整个问题。
我可以推荐任何boost::bignum整数类吗?
我怀疑uint1024_t
(或者其他什么……他们也有128、256和512位的int,已经被类型化了,你可以很容易地声明自己的int(会满足你的需求,允许你执行一个%
,而不是每次迭代一个。这可能会超过使用bignum与c++的内置int时所损失的性能。
2^1024~=1.8e+308。足以代表任何308位数字。这可能太过分了。
2^512~=1.34e+154。适用于任何154位数字。
等等。
我怀疑你应该先写一个循环,通过n=4e+6->5e+6,写出哪个字符串最长,然后适当地调整uint*_t的大小。如果最长的字符串长度超过308个字符,您可以创建自己的:
typedef number<cpp_int_backend<LENGTH, LENGTH, unsigned_magnitude, unchecked, void> > myReallyUnsignedBigInt;
模运算符可能是该内部循环中最昂贵的运算。在外循环上而不是在内循环上执行每次迭代一次(O(n(vs O(n^2((应该会节省相当多的时间。
再加上整个"不去串"的事情会为bignum的开销买单吗?你得试试看。
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何用数字处理log(0)
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 将数字转换为字母(例如:123 转换为一二三)
- C++如何计算用户输入的数字中的偶数位数
- 如何在C++中确定文本文件中的元素是字符还是数字
- 打印数字图案
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 如何检查一个c++字符串中有多少相同的字符/数字
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 将数字打印成文字
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 鸽子洞/多个数字