C 将10^6位的十进制数转换为二进制表示形式

C 将10^6位的十进制数转换为二进制表示形式,c,algorithm,binary,time-complexity,biginteger,C,Algorithm,Binary,Time Complexity,Biginteger,是否可以在O(d)时间内将非常大的十进制数(包含d位)转换为二进制表示 这里d=log(n),其中d是十进制数中的数字,即:例如10^6。所以这个数字明显小于10^(10^6) 如果有一个算法需要O(d)或O(dc)步骤。请分享。其中d是十进制数中的位数。没有一个用于O(d) 证明(不严格): 十进制数可以写成x(k)*10^k的k之和,其中x(k)是k第位数字(从最低有效位开始) 10包括两个因素2和5。2是一个简单的位移位,但5设置了2个位。其结果是,当添加数字k时,必须处理的位数不受任何常

是否可以在O(d)时间内将非常大的十进制数(包含d位)转换为二进制表示

这里d=log(n),其中d是十进制数中的数字,即:例如10^6。所以这个数字明显小于10^(10^6)


如果有一个算法需要O(d)O(dc)步骤。请分享。其中
d
是十进制数中的位数。

没有一个用于O(d)

证明(不严格):

十进制数可以写成
x(k)*10^k
k
之和,其中
x(k)
k
第位数字(从最低有效位开始)

10包括两个因素2和5。2是一个简单的位移位,但5设置了2个位。其结果是,当添加数字
k
时,必须处理的位数不受任何常数的限制。对于任何常数
m
,存在
k
,使得
1*10^k
中的非零比特数大于
m


因此,每个数字所需的(最大)工作量不是恒定的,它会随着
k
的增加而增加。

没有一个用于O(d)

证明(不严格):

十进制数可以写成
x(k)*10^k
k
之和,其中
x(k)
k
第位数字(从最低有效位开始)

10包括两个因素2和5。2是一个简单的位移位,但5设置了2个位。其结果是,当添加数字
k
时,必须处理的位数不受任何常数的限制。对于任何常数
m
,存在
k
,使得
1*10^k
中的非零比特数大于
m


因此,每个数字所需的(最大)工作量不是常数,它会随着
k
的增加而增加。

如果我读得正确,答案是否定的,您无法将十进制数转换为O(logn)中的二进制表示,其中n是位数。由于每个数字都需要扫描,所以时间复杂度至少为O(n)。如果我没有正确阅读,你应该解决你的问题。语言应该与数字的时间比例关系不大。我正在尝试为10^6位数的数字找到二进制表示法。有人能推荐一种最佳方法吗?标准算法是
result=result*10+位
,在您的符号中是O(log(n)^2),或者
O(db)
其中
d
是十进制数,
b
是二进制数中的位/字节数/uint64\t。@AnttiHaapala:十进制数是如何表示的?如果我读得正确,答案是否定的,则无法将十进制数转换为O(logn)中的二进制表示,其中n是位数。由于每个数字都需要扫描,所以时间复杂度至少为O(n)。如果我没有正确阅读,你应该解决你的问题。语言应该与数字的时间比例关系不大。我正在尝试为10^6位数的数字找到二进制表示法。有人能推荐一种最佳方法吗?标准算法是
result=result*10+位
,在您的符号中是O(log(n)^2),或者
O(db)
其中
d
是十进制数,
b
是二进制数中的位/字节/uint64\t。@AnttiHaapala:十进制数是如何表示的?