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 :-)。
亲切的问候。
正如标题所说,我必须找到给定数字的基本系统,它最终具有最多的空值。例如,如果我有数字 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 :-)。
亲切的问候。