C++中11位数的数字的乘积

4bbkushb  于 2023-04-08  发布在  其他
关注(0)|答案(2)|浏览(174)

我正在写一个关于乘法持久性的代码,我需要写一个计算数字中数字乘积的函数。这是一个基本函数,我已经写了,但我意识到它不能计算任何超过10位数的数字的乘积。如果数字有11位或更多位,它只会说“903168”,不管输入什么数字。
这是它自己的样子:

#include <iostream>
using namespace std;

int main()
{
    int a; int product = 1;
    cout << "Enter a number: ";
    cin >> a;
    do  
    { 
        product = product * (a % 10);
        a = a / 10;
    } 
    while (a != 0);

    cout << "The product of the digits of this number is: " << product;
}

还有人面临过同样的问题吗?你知道我该如何修复它,以便能够对任何数字使用这个功能吗?

iqxoj9l9

iqxoj9l91#

这里有一个时间复杂度为O(log n)的方法。递归有时可以降低时间复杂度。希望这对你的问题有帮助!

int getPro(long int n) {
    if (n==0)
        return 1;

    return (n%10)*getPro(n/10);
}
bjg7j2ky

bjg7j2ky2#

你需要使用一个更大的类型来保存你输入的数字和产品。在你的系统上,int几乎肯定是32位。让我们使用long long int,它是64位。

#include <iostream>
using namespace std;

int main()
{
    long long int a; 
    long long int product = 1;
    cout << "Enter a number: ";
    cin >> a;
    do  
    { 
        product = product * (a % 10);
        a = a / 10;
    } 
    while (a != 0);

    cout << "The product of the digits of this number is: " << product << endl;
}

现在:

% ./a.out
Enter a number: 12345678912
The product of the digits of this number is: 725760                           % ./a.out     
Enter a number: 99999999999
The product of the digits of this number is: 31381059609

修改上面的代码以避免using namespace std;,并使用使位数更明显的类型。

#include <iostream>
#include <cstdint>

int main()
{
    using std::cout;
    using std::endl;
    using std::cin;

    int64_t a; 
    int64_t product = 1;
    cout << "Enter a number: ";
    cin >> a;
    do  
    { 
        product *= a % 10;
        a /= 10;
    } 
    while (a);

    cout << "The product of the digits of this number is: " 
         << product
         << endl;
}

相关问题