C语言用数组存储大型数据的算法

Python018

C语言用数组存储大型数据的算法,第1张

楼主一定懂c++吧?c++标准库里面有一个模板类叫

bitset<>

专门用来做位操作的。

你的问题用这个可以高效的解决,建立一个足够大的空间,比如8000个位

bitset<8000>

然后就简单了,乘法函数把乘数转化成bitset<32>类型的对象(用乘数直接初始化代表乘数的bitset<32>对象)然后用位运算符把被乘数(那个bitset<8000>类型的对象)按位右移,(一个10进制数右移一次相当于乘10,一个2进制数右移一次相当于乘2;乘数中,二进制位如果知道它是从右数第n位,那么就把被乘数向右移动n-1位就完成了乘法,然后再做下一个二进制位的乘法,直到被乘数中所有的2进制位都被使用过为止)。做完了每32位2进制位转化成一个unsigned

long,存储在一个链表或者数组(怀疑空间不够,内存里很有可能没有这么大的连续空间)中,如果按顺序逐个输出就是问题的结果。

我觉得这个方法比2楼的高效。

如果你不想使用c++标准库……那也可以考虑用c中的位域,也支持位操作。不过远没有前面的方便,很多操作都要自己做,比如最基本的你必须有一个适合乘法操作的动态增长的位域组成的链表。而且即使这样还不一定高效。

……写完了才看的3楼,3楼就做得很好了。

C语言中,用Char定义一个变量,系统会为这个变量分配一个字节的空间,只能存放一个字符,如果是一串字符,就要用char定义一个数组,来存放字符串

比如,你想存放一个字符串“Fuzhou”(一个以上字符),可以定义一个字符数组,假设数组名起名为cname,采用下列代码

char

cname[]="Fuzhou"

或者

char

cname[7]

cname[0]='F'

cname[1]='u'

cname[2]='z'

cname[3]='h'

cname[4]='o'

cname[5]='u'

cname[6]='\0'

前者是定义时赋值(初始化),后者是先定义后赋值,最后一个‘\0’,是字符串结束的标志。

C语言中,没有专门定义字符串的数据类型,但有一些关于字符串运算的函数。