C算法最终找到具有最多空值的基本系统

C Algorithm to find base system with the highest number of nulls in the end

正如标题所说,我必须找到给定数字的基本系统,它最终具有最多的空值。例如,如果我有数字 100 000,答案是 10,因为在 10 系统中,空值的数量最多。数字 54 的答案是 3,因为在 3 数字系统中它看起来像 2000(最后空值的数量最多)。我编写了一个运行良好的程序,但如果数字超过整数的最大值,就会出现问题。我不知道如何解决它。

#include <stdio.h>
#define NUM 29040838157


int convert(int number, int system)
{
    int i=0;    

    while(number%system == 0)
    {
        i++;
        number/=system;
    }

    return i;
}

int main()
{   
    int i,max;
    int temp=0;

    for(i=2;i<=NUM;i++)
    {
        if(convert(NUM,i) >= temp)
        {
            max=i;
            temp = convert(NUM,max);
        }
    }

    printf("%d\n",max);
}

已解决。
明智的做法是使用 unsigned long long int 或在数组中表示数字。

尝试使用 Long 类型(大于 int)或添加一个控件,如果数字大于最大 int(如果它是无符号的,则为 32767 或 65535)

你的问题只是质因数分解。找出任何执行整数素因数分解的程序。计数最高的主要因素就是您正在寻找的答案。

对于更大的数字,您应该使用也可以存储更大整数值的数据类型。我推荐unsigned long long

#define NUM 29040838157ULL //note the ULL here    

unsigned long long convert(unsigned long long number, unsigned long long system)
{
    int i=0;    

    while(number%system == 0)
    {
        i++;
        number/=system;
    }

    return i;
}

int main()
{   
    unsigned long long i,max;
    unsigned long long temp=0;

    for(i=2;i<=NUM;i++)
    {
        if(convert(NUM,i) >= temp)
        {
            max=i;
            temp = convert(NUM,max);
        }
    }

    printf("%llu\n",max);
}

以此类推

创建你自己的长。 创建一个变量数组,意思是你原来的数以千计。 在里面: 拆分您的号码 数字 = 数字[0]+1000*数字[1]+1000000*数字[2]+... (要找出如何做到这一点,并不难+你会遇到一个新的边界,即数组的大小。 内循环: 将最高数组成员除以你的 i。取余数(模数)。乘以 1000 并将其添加到下一个数组成员。 b = 数字[3] a = b - i*(b%i) b = 1000*a + 数字[2] ETC... 如果最后一个 a 为零,则为命中。 你必须做一些事情才能再分配时间。反馈给 Number[3] 之类的东西。

这是一个想法,你必须制定细节。我想这是一个编程练习。

如果您是一名真正的 IT 人员,您将使用 1024 而不是 1000 :-)。

亲切的问候。