Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 鸽子洞/多个数字 input:integer(我称之为N)和(1)输出:70(70 mod 2==0) #包括 #包括 使用名称空间std; typedef long-long-ll; int remaind(字符串数,ll m) { ll mod=0; 对于(int i=0;i>n; ans.append(n,'7'); 对于(int i=ans.length()-1;i>=0;i--) { if(remind(ans,n)==0) { cout_C++ - Fatal编程技术网

C++ 鸽子洞/多个数字 input:integer(我称之为N)和(1)输出:70(70 mod 2==0) #包括 #包括 使用名称空间std; typedef long-long-ll; int remaind(字符串数,ll m) { ll mod=0; 对于(int i=0;i>n; ans.append(n,'7'); 对于(int i=ans.length()-1;i>=0;i--) { if(remind(ans,n)==0) { cout

C++ 鸽子洞/多个数字 input:integer(我称之为N)和(1)输出:70(70 mod 2==0) #包括 #包括 使用名称空间std; typedef long-long-ll; int remaind(字符串数,ll m) { ll mod=0; 对于(int i=0;i>n; ans.append(n,'7'); 对于(int i=ans.length()-1;i>=0;i--) { if(remind(ans,n)==0) { cout,c++,C++,您的方法是错误的,假设您将“70”除以5。那么您的结果将是2,这是不正确的(只需分析您的代码,看看为什么会发生这种情况) 您可以根据777 0000000这样的数字进行搜索,但请仔细想想——哪些数字需要加零,哪些数字不需要加零 下一步,不要使用字符串!如果您知道a的提醒和b的提醒,请考虑a*b的提醒。编程时,请注意整数大小,使用64位整数 那么a+b呢 最后,查找数字10、100、1000、10000等的提醒(同样,不要使用字符串,仍然尝试查找10的任何幂的提醒) 好吧,如果你能做到这一切,你就

您的方法是错误的,假设您将“70”除以5。那么您的结果将是2,这是不正确的(只需分析您的代码,看看为什么会发生这种情况)

您可以根据777 0000000这样的数字进行搜索,但请仔细想想——哪些数字需要加零,哪些数字不需要加零

下一步,不要使用字符串!如果您知道a的提醒和b的提醒,请考虑a*b的提醒。编程时,请注意整数大小,使用64位整数

那么a+b呢

最后,查找数字10、100、1000、10000等的提醒(同样,不要使用字符串,仍然尝试查找10的任何幂的提醒)


好吧,如果你能做到这一切,你就能很容易地解决整个问题。

我可以推荐任何整数类吗

我怀疑
uint1024\u t
(或者其他什么……它们也有128、256和512位整数,并且您可以很容易地声明自己的整数)将满足您的需要,允许您执行单个
%
,而不是每次迭代执行一个。这可能会超过使用bignum vs c++内置整数时所损失的性能

2^1024~=1.8e+308。足以表示任何308位数字。这可能太多了

2^512~=1.34e+154。适用于任何154位数字

等等

我想你应该先写一个循环,经过n=4e+6->5e+6,写出哪个字符串最长,然后适当调整uint*\t的大小。如果最长的字符串长度超过308个字符,你可以自己编写:

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;
}
typedef number myreallunsignedbigint;
模运算符可能是该内循环中最昂贵的操作。在外循环上而不是在内循环上执行一次迭代(O(n)vs O(n^2))可以节省大量时间


这将加上整个“不去和来自字符串”的东西来支付Bigunm的开销吗?你必须试试看。< /P>但是,如果n是4999999,那么答案就很容易超过(长长)类型,这就是为什么我用字符串作为输出。是的,我们可以考虑数字A=3456789和B=2345678,并试图找到。(a*b)%4999999。你能用64位int完成吗?现在,那((a*b)*(a*b))呢%4999999?你必须想一想,这不是一项简单的任务,但也不是太难。请不要将问题编辑成答案,或在标题中添加已解决的问题。要将问题标记为已解决,请接受其中一个答案。如果你自己解决了问题,则可以发布答案并接受。你不需要在标题中添加

已解决的
,正确的方法是如果你已经解决了你的问题,那就是接受了一个答案,你已经接受了。另外,请不要将你最终得到的答案添加到问题中。将其作为答案发布。非常感谢你的回答,很抱歉我没有正确编辑我的帖子。我实际上用字符串解决了这个问题。
typedef number<cpp_int_backend<LENGTH, LENGTH, unsigned_magnitude, unchecked, void> > myReallyUnsignedBigInt;