数据处理方法、装置、电子设备以及存储介质与流程

文档序号:13949019阅读:174来源:国知局
数据处理方法、装置、电子设备以及存储介质与流程

本申请涉及计算机技术领域,更具体涉及数据处理方法、装置、电子设备以及存储介质。



背景技术:

在数学中数值的大小是没有上限的,但是在计算机中,由于字长的限制,计算机所能表示的数值范围是有限的,若进行运算的数值超出计算机表示的范围,则无法获得准确的结果。



技术实现要素:

有鉴于此,本发明提供了一种数据处理方法、装置、电子设备以及存储介质,以克服现有技术中若进行运算的数值超出计算机表示的范围,则无法获得准确的结果的问题。

为实现上述目的,本发明提供如下技术方案:

一种数据处理方法,包括:

将待运算的第一数值转换成第一字符串,以及将待运算的第二数值转换成第二字符串;

基于所述第一字符串创建第一数组,以及基于所述第二字符串创建第二数组;

其中,所述第一数组包括的连续n个第一元素的值组成所述第一字符串,一个第一元素的值为所述第一字符串中的一个字符,n为所述第一字符串的长度;所述第二数据包含的连续m个第二元素的值组成所述第二字符串,一个第二元素的值为所述第二字符串中的一个字符,m为所述第二字符串的长度;

创建第三数组,所述第三数组用于存储所述第一数值和所述第二数值的计算结果,所述第三数组包含的元素个数q大于或等于m与n之和;

基于所述第一数值和所述第二数值的运算类型,依次从所述第一数组中取出至少一个第一元素;针对取出的所述至少一个第一元素,从所述第二数组中取出相应的至少一个第二元素;

分别对每次取出的所述至少一个第一元素以及相应的所述至少一个第二元素进行运算,获得中间结果;

基于各中间结果获取所述第一数值和所述第二数值的计算结果;

将所述计算结果存储在所述第三数组中。

一种数据处理装置,包括:

数据类型转换模块,用于将待运算的第一数值转换成第一字符串,以及将待运算的第二数值转换成第二字符串;

第一创建模块,用于基于所述第一字符串创建第一数组,以及基于所述第二字符串创建第二数组。

其中,所述第一数组包括的连续n个第一元素的值组成所述第一字符串,一个第一元素的值为所述第一字符串中的一个字符,n为所述第一字符串的长度;所述第二数据包含的连续m个第二元素的值组成所述第二字符串,一个第二元素的值为所述第二字符串中的一个字符,m为所述第二字符串的长度。

第二创建模块,用于创建第三数组,所述第三数组用于存储所述第一数值和所述第二数值的计算结果,所述第三数组包含的元素个数q大于或等于m与n之和。

第一计算模块,用于基于所述第一数值和所述第二数值的运算类型,依次从所述第一数组中取出至少一个第一元素;针对取出的所述至少一个第一元素,从所述第二数组中取出相应的至少一个第二元素;分别对每次取出的所述至少一个第一元素以及相应的所述至少一个第二元素进行运算,获得中间结果。

第二计算模块,用于基于各中间结果获取所述第一数值和所述第二数值的计算结果。

存储模块,用于将所述计算结果存储在所述第三数组中。

一种电子设备,包括:

存储器,用于存储程序;

处理器,用于执行所述程序,所述程序具体用于:

将待运算的第一数值转换成第一字符串,以及将待运算的第二数值转换成第二字符串;

基于所述第一字符串创建第一数组,以及基于所述第二字符串创建第二数组;

其中,所述第一数组包括的连续n个第一元素的值组成所述第一字符串,一个第一元素的值为所述第一字符串中的一个字符,n为所述第一字符串的长度;所述第二数据包含的连续m个第二元素的值组成所述第二字符串,一个第二元素的值为所述第二字符串中的一个字符,m为所述第二字符串的长度;

创建第三数组,所述第三数组用于存储所述第一数值和所述第二数值的计算结果,所述第三数组包含的元素个数q大于或等于m与n之和;

基于所述第一数值和所述第二数值的运算类型,依次从所述第一数组中取出至少一个第一元素;针对取出的所述至少一个第一元素,从所述第二数组中取出相应的至少一个第二元素;

分别对每次取出的所述至少一个第一元素以及相应的所述至少一个第二元素进行运算,获得中间结果;

基于各中间结果获取所述第一数值和所述第二数值的计算结果;

将所述计算结果存储在所述第三数组中。

一种存储介质,所述存储介质存储有多条指令,所述指令适于处理器进行加载,以上述任一项所述的数据处理方法中的步骤。

经由上述的技术方案可知,与现有技术相比,本发明实施例提供了一种数据处理方法,本申请巧妙的将数值计算转换为数组中各元素之间的运算,从而实现了电子设备对较大的数值的运算,使得能够对超出电子设备表示的数值范围的数值进行运算。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请实施例提供的一种数据处理方法的流程图;

图2为本申请实施例提供的一种数据处理方法中加法运算方法的一种实现方式的流程图;

图3为本申请实施例提供的一种数据处理方法中加法运算方法的具体示例图;

图4为本申请实施例提供的一种数据处理方法中减法运算方法的一种实现方式的流程图;

图5为本申请实施例提供的一种数据处理方法中减法运算方法的具体示例图;

图6为本申请实施例提供的一种数据处理方法中乘法运算方法的一种实现方式的流程图;

图7为本申请实施例提供的一种数据处理方法中乘法运算方法的具体示例图;

图8为本申请实施例提供的一种数据处理方法中除法运算方法的一种实现方式的流程图;

图9为本申请实施例提供的一种数据处理方法中除法运算方法的示例图;

图10为本申请实施例提供的数据处理装置的结构图;

图11为本申请实施例提供的一种电子设备的结构图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

在数学中,数值的大小是没有上限的,但是在电子设备中,由于字长的限制,电子设备所能表示的数值范围是有限的,当对比较小的数值进行运算时,如:1234+5678,这样的数值并没有超出电子设备表示的数值范围,所以可以运算。但是当进行大数据运算时,会发现参与运算的数值往往超过电子设备的基本数据类型的表示范围,比如说,在天文学上,如果一个星球距离地球为100万光年,那么将其化简为公里,或者是米的时候,该距离是一个很大的数值,超出了电子设备标识的数值范围。

在某些领域里,甚至可能出现几百万位的数值进行运算,例如大家所熟知圆周率π的数值,在一般的数值计算中用到圆周率的不须要多大的精度,但在计算一些星球或是星系上的体积面积时便显的误差很大了,这就要求π值计算的精度达到几百万位甚至更高,才能缩小误差。又如,考古学家计算石头内的碳元素衰变来考证地球形成的时间,更是将计算的结果精确到了百年以内。所以说大数的运算是涉及领域多,应用范广,与生活息息相关。由于这样的数值运算超出了电子设备表示的数值范围,所以电子设备将无法对其进行直接计算。

本申请巧妙的将数值计算转换为数组中各元素之间的运算,从而实现了电子设备对较大的数值的运算。

如图1所示,为本申请实施例提供的一种数据处理方法的流程图,该方法包括:

步骤s101:将待运算的第一数值转换成第一字符串,以及将待运算的第二数值转换成第二字符串。

本申请实施例可以对多个数值进行运算,无论对几个数值进行运算,均可以拆解成两个数值的运算,例如,3个数值相加的运算,可以先计算两个数值相加的结果,然后在计算该结果与另一数值相加的结果。

优选的,在步骤s101之前还包括:若所述第一数值和/或所述第二数值和/或所述第一数值与所述第二数值的运算结果超出电子设备的运算范围,执行步骤s101。

步骤s102:基于所述第一字符串创建第一数组,以及基于所述第二字符串创建第二数组。

其中,所述第一数组包括的连续n个第一元素的值组成所述第一字符串,一个第一元素的值为所述第一字符串中的一个字符,n为所述第一字符串的长度;所述第二数据包含的连续m个第二元素的值组成所述第二字符串,一个第二元素的值为所述第二字符串中的一个字符,m为所述第二字符串的长度。

假设,第一数值为12345,第二数值为2345;第一字符串str1=12345;第二字符串str2=2345;第一数组可以为第一数组array1,其中,array1[0]=5,array1[1]=4,array1[2]=3,array1[3]=2,array1[4]=1;第二数组可以为第二数组array2,其中,array2[0]=5,array2[1]=4,array2[2]=3,array2[3]=2。

综上,优选的,将第一字符串从右至左,即将第一数值从低位至高位,依次赋值给第一数组中偏移地址从小至大的各元素;将第二字符串从右至左,即将第二数值从低位至高位,依次赋值给第二数组中偏移地址从小至大的各元素。

当然,第一数组(或第二数组)包含的元素个数也可以大于第一字符串(或第二字符串)的长度,此时,第一数组(或第二数组)中包含为空值的元素。这样会为后续的计算过程变得复杂。

步骤s103:创建第三数组。

所述第三数组用于存储所述第一数值和所述第二数值的计算结果,所述第三数组包含的元素个数q大于或等于m与n之和。

由于两个数值的运算结果的位数一定不会超过两个数值的位数之和,因此,创建的第三数组包含的元素个数q大于或等于m与n之和。优选的,q=m+n。

步骤s104:基于所述第一数值和所述第二数值的运算类型,依次从所述第一数组中取出至少一个第一元素;针对取出的所述至少一个第一元素,从所述第二数组中取出相应的至少一个第二元素。

本申请实施例中,将第一数组包含的元素称为第一元素,将第二数组包含的元素称为第二元素。

步骤s104需要满足以下条件:从第一数组中取出的至少一个第一元素为电子设备能够表示的数值范围,从第二数组中取出的至少一个第二元素为电子设备能够表示的数值范围,且至少一个第一元素和至少一个第二元素对应的运算结果也是电子设备能够标识的数值范围。

步骤s105:分别对每次取出的所述至少一个第一元素以及相应的所述至少一个第二元素进行运算,获得中间结果。

可以理解的是,由于至少一个第一元素和至少一个第二元素无法直接进行计算,因此,还需要将所述至少一个第一元素转换成第三数值,将所述至少一个第二元素转换成第四数值;基于所述运算类型,获得所述第三数值和所述第四数值的中间结果。

步骤s106:基于各中间结果获取所述第一数值和所述第二数值的计算结果。

步骤s107:将所述计算结果存储在所述第三数组中。

本申请巧妙的将数值计算转换为数组中各元素之间的运算,从而实现了电子设备对较大的数值的运算,使得能够对超出电子设备表示的数值范围的数值进行运算。

可以理解的是,运算类型不同,步骤s104至步骤s105的具体过程不同,本申请实施例提供但不限于以下方法。

第一种,加法。

如图2所示,为本申请实施例提供的一种数据处理方法中加法运算方法的一种实现方式的流程图,该方法包括:

步骤s21:从所述第一数组array1中取出array1[x],以及,从所述第二数组array2取出array2[x]。

array1[x]与array2[x]为同一数位,n、m、x为整数。

不同计数单位,按照一定顺序排列,它们所占位置叫做数位.在整数中的数位是从右往左,逐渐变大:第一位是个位,第二位是十位,第三位是百位,第四位是千位,第五位是万位,第六位是十万位,第七位是百万位,第八位是千万位,以此类推。

步骤s22:检测第三数组array3中array3[x]的是否为空值,若为空值,则执行步骤s23;若不为空值,则执行步骤s24。

步骤s23:基于array1[x]与array2[x]获得中间结果。

步骤s24:基于array1[x]、array2[x]以及array3[x]获得中间结果。

步骤s25:若获得中间结果过程中有进位时,将中间结果的高位存储至第三数组array3[x+1]中,将中间结果的低位存储至array3[x]中;若获得中间结果的过程中无进位,将中间结果存储至array3[x]中。

步骤s26:若x+1小于或等于m-1,将x+1赋值给x,返回步骤s21。

步骤s27:若x+1大于m-1,且小于或等于n-1,将x+1赋值给x,若array3[x]不为空值,基于array1[x]与array3[x]获得中间结果;返回步骤s25;若array3[x]为空值,将array1[x]赋值给array3[x],返回步骤s27。

s28、若x+1大于n-1,结束。

为了本领域技术人员更加理解本申请实施例提供的加法运算方法,下面举一具体例子进行说明,具体参见图3所示,为本申请实施例提供的一种数据处理方法中加法运算方法的具体示例图,假设,第一数值的位数为1024位,第一数值为123456……6789;第二数值的位数也为1024位,第二数值为991111……1111,那么第一数组array1[0]=9,array1[1]=8,array1[2]=7,array1[3]=6,……,array1[1018]=6,array1[1019]=5,array1[1020]=4,array1[1021]=3,array1[1022]=2,array1[1023]=1;第二数组array2[0]=1,array2[1]=1,array2[2]=1,array2[3]=1,……,array1[1018]=1,array1[1019]=1,array1[1020]=1,array1[1021]=1,array1[1022]=9,array1[1023]=9。

首先,(步骤s21)从第一数组array1中取出array1[0],从第二数组array2中取出array2[0],(步骤s22)由于第三数组array3[0]为空值;因此,(步骤s23)基于array1[0]与array2[0]获得中间结果10,假设运算为十进制,(步骤s25)该中间结果有进位1,将该中间结果的高位1存储至array3[1]中,将中间结果的低位0存储至array3[0]中;(步骤s26)0+1小于1023,因此,将1复制给x,进行循环,再次返回步骤s21。

(步骤s21)从第一数组array1中取出array1[1],从第二数组array2中取出array2[1],(步骤s22)由于第三数组array3[1]不为空值;因此,(步骤s24)基于array1[1]、array2[1]以及array3[1]获得中间结果10,假设运算为十进制,(步骤s25)该中间结果有进位1,将该中间结果的高位1存储至array3[2]中,将中间结果的低位0存储至array3[1]中;(步骤s26)1+1小于1023,因此,将2复制给x,再次返回步骤s21。

依次循环,直至第1024次循环,(步骤s21)从第一数组array1中取出array1[1023],从第二数组array2中取出array2[1023],(步骤s22)由于第三数组array3[1023]不为空值;因此,(步骤s24)基于array1[1023]、array2[1023]以及array3[1023]获得中间结果11,假设运算为十进制,(步骤s25)该中间结果有进位1,将该中间结果的高位1存储至array3[1024]中,将中间结果的低位1存储至array3[1023]中;(步骤s26)1023+1大于1023,因此,停止运算。

即将所有的结果都存储至第三数组中了,如图3所示。

由于运算结果只有1024位,因此,优选的,可以将第三数组array3[2047]至array3[1025]去除,只保留第三数组中的array3[0]至array3[1024]即可。

本申请实施例提供的具体实例中由于第一数值和第二数值的位数相同,因此未用到步骤s27,若第一数值和第二数值的位数不同,则需要用到步骤s27。例如,第一数值为123,第二数值为1,那么,第一数组array1[0]=3,array1[1]=2,array1[2]=1;第二数组array2[0]=1;在第一次循环中,array1[0]+array2[0]=4,将4存储至array3[0]中;在该例子中,m为1,n为3,在第一次循环中x=0;x+1=0+1>m-1=1-1=0;且x+1>m-1,x+1<n-1=3-1=2,因此执行步骤s27,由于array3[1]为空值,因此,将array1[1]赋值给array3[1];再次返回至步骤s27,此时x为1,x+1赋值给x,x为2,由于array3[2]为空值,因此,将array1[2]赋值给array3[2],再次返回至s27时,由于x+1=2+1大于n-1,因此执行步骤s28,结束计算。

由于并没有与第一数组array1[1]、array1[2]进行相加的对象,因此,第三数组中array3[1]即为array1[1],array3[2]即为array1[2]。

第二种,减法。

假设第一数值为减数,第二数值为被减数。

本申请实施例还可以包括,比较待执行减法运算的两个数值的大小,将大的数值称为第一数值,将小的数值称为第二数值。即第一数值减去第二数值为正数。

如图4所示,为本申请实施例提供的一种数据处理方法中减法运算方法的一种实现方式的流程图,该方法包括:

步骤s31:从所述第一数组array1中取出array1[x],以及,从所述第二数组array2取出array2[x],array1[x]与array2[x]为同一数位。

假设,第一数值的位数为1024位,第一数值为123456……6789;第二数值的位数为1023位,第二数值为91111……1990;第一数组array1[0]=9,array1[1]=8,array1[2]=7,array1[3]=6,……,array1[1018]=6,array1[1019]=5,array1[1020]=4,array1[1021]=3,array1[1022]=2,array1[1023]=1;第二数组array2[0]=0,array2[1]=9,array2[2]=9,array2[3]=1,……,array1[1018]=1,array1[1019]=1,array1[1020]=1,array1[1021]=1,array1[1022]=9。

第三数组可以包括1024+1023=2047个元素。

在第一次执行步骤s31时,x的值为0(若第一数组和第二数组中放置个位数的元素的偏移地址为1,则x的值为1),每循环一次x的值增长1。

步骤s32:检测第三数组array3中array3[x]是否为空值,若为空值,则执行步骤s33;若不为空值,则执行步骤s34。

步骤s33:基于array1[x]与array2[x]获得中间结果。

步骤s34:基于array3[x]以及array2[x]获得中间结果。

步骤s35:若获得中间结果的过程中有借位时,将array1[x+1]-1的结果存储至第三数组array3[x+1]中,并将中间结果的低位存储至array3[x]中;若获得中间结果的过程中无借位,将中间结果存储至array3[x]中。

步骤s36:若x+1小于或等于m-1,将x+1赋值给x,返回步骤s31。

如图5所示,为本申请实施例提供的一种数据处理方法中减法运算方法的具体示例图,在第一次循环过程中,x=0,首先执行array1[0]对应的数值9减去array2[0]对应的数值0,等于9(后续直接用array1[0]-array2[0]=0表示),因此,可以将9存储至array3[0]中;在第二次循环过程中,x=1,执行array1[1]-array2[1]=8-9,由于8小于9,因此需要向array1[2]借位,将借位后的array1[2]-1=7-1=6存储至array3[2]中,这样,借位后的array1[1]对应的数值就变更为18,借位后的array1[1]-array2[1]=18-9=9,将9存储至array3[1]中;在第三次循环过程中,x=2,需要执行array1[2]-array2[2],由于array1[2]已经被借位了,因此基于array1[2]进行计算不准确,由于array3[2]中存储有被借位后的array1[2],因此,计算array3[2]-array2[2]=6-9,由于6小于9,因此需要向array1[3]借位,将array1[3]-1=5存储至array3[3],借位后的array3[2]为16,借位后的array3[2]-array2[2]=16-9=7,将7存储至array3[2];以此类推,在第1023次循环过程中,x=1022,需要执行array1[1022]-array2[1022]=2-9,由于2小于9,因此需要向array1[1023]借位,并将array1[1023]-1=1-1=0存储至array3[1023]中;借位后的array1[1022]为12,借位后的array1[1022]-array2[1022]=12-9=3,将3存储至array3[1022]。

步骤s37:若x+1大于m-1,且小于或等于n-1,将x+1赋值给x,若array3[x]不为空值,返回步骤s37;若array3[x]为空值,将array1[x]赋值给array3[x],返回步骤s37。

仍以上述为例,n=1024,m=1023,在第1023次循环过程中,x=1022,由于x+1=1022+1>m-1,且x+1=1022+1=n-1,因此执行步骤s27,将x+1=1023赋值给x,由于array3[1023]为0,不为空值,该值为array1[1023]被借位后的值,因此需要保留该值,返回步骤s37,此时,x=1023,x+1>n-1,因此,结束计算。

s38、若x+1大于n-1,结束。

由于第二数组的array2,最高位为array2[1022],因此,第1024次循环过程中array3[1022]不为空值,为0,因此,保留这一值。

在图5所示例子中,array3[2046]中array3[1021]至array3[0]为第一数值减去第二数值的结果,优选的,可以将第三数组中array3[2046]至array3[1022]去除。

若在真实的运算中,是较小的数值作为减数,较大的数值作为被减数,则可以将“—”符号存储至array3[1022]中。

第三种,乘法。

如图6所示,为本申请实施例提供的一种数据处理方法中乘法运算方法的一种实现方式的流程图,该方法包括:

步骤s41:从所述第一数组array1中取出array1[x]。

步骤s42:从所述第二数组array2取出array2[l],n、m、x、l为整数。

步骤s43:基于array1[x]与array2[l],获取乘积结果。

步骤s44:基于所述乘积结果与第三数组中元素array3[x]对应的值,获取更新至第三数组中元素array3[x]的值以及元素array3[x+1]的值。

步骤s44可具体包括:若所述乘积结果无进位,且array3[x]为空值,则将所述乘积结果存储至array3[x]中;若所述乘积结果无进位,且array3[x]不为空值,则基于array3[x]和所述乘积结果进行加法运算,将获得的结果存储至第三数组array3中相应元素的位置;若所述乘积结果有进位,且array3[x]为空值,则将乘积结果的进位存储至array3[x+1]中,将乘积结果的低位存储至array3[x]中;若所述乘积结果有进位,且array3[x]不为空值,将乘积结果与array3[x]对应的值进行加法运算,获得的结果对应的高位存储至array3[x+1]中,将该结果的低位存储至array3[x]中。

步骤s45:若x+1小于或等于n-1,将x+1赋值给x,返回步骤s41。

步骤s46:若x+1大于n-1,且l+1小于或等于m-1,将0赋值给x,将l+1赋值给l,返回步骤s41。

步骤s47:若l+1大于m-1,结束。

为了本领域更加理解本申请实施例,下面举一具体例子进行说明,如图7所示,为本申请实施例提供的一种数据处理方法中乘法运算方法的具体示例图。

假设第一数值包括1024位,第一数值为123456……6789;第二数值包括1023位,第二数值为21111……1922;则第一数组array1[0]=9,array1[1]=8,array1[2]=7,array1[3]=6,……,array1[1018]=6,array1[1019]=5,array1[1020]=4,array1[1021]=3,array1[1022]=2,array1[1023]=1;第二数组array2[0]=2,array2[1]=2,array2[2]=9,array2[3]=1,……,array1[1018]=1,array1[1019]=1,array1[1020]=1,array1[1021]=1,array1[1022]=2。

在第一次大循环过程中,第一次子循环:x=0,l=0;首先从第一数组array1中取出元素array1[0],从第二数组中取出array2[0],计算array1[0]对应的值和array2[0]对应的值的乘积结果,以后用array1[0]*array2[0]表示;array1[0]*array2[0]=9*2=18。

该乘积结果18具有进位1,由于此时第三数组中array3[0]为空值,所以,可以直接将8存储至array3[0]中,将1存储至array3[1]中。

第二次子循环:由于x+1=0+1=1<n-1=1024-1=1023,因此将1赋值给x,即x=1,l=0,返回步骤s41,从第一数组array1中取出元素array1[1],从第二数组array2取出array2[0],获得array1[1]与array2[0]的乘积结果,array1[1]*array2[0]=8*2=16。

此乘积结果有进位,且array3[1]不为空值,为1;因此可以获得16与1的加法运算,获得17;将17的低位1存储至array3[1];将高位存储至array3[2];x+1=1+1等于2,2<1023,因此返回步骤s41,继续进行子循环;当x+1>1023时,说明array2[0]已经与第一数组array1中各元素进行了相乘;因此,将l+1=0+1赋值给l,并反馈至s41。

在array2[0]与第一数组中各元素进行相乘后的结果为246912……13578;该字符串246912……13578存储至第三数组array3中,即array3[0]=8,array3[1]=7,array3[2]=5,array3[3]=3,array3[4]=1……,array3[1018]=2,array3[1019]=1,array3[1020]=9,array3[1021]=6,array3[1022]=4,array3[1023]=2。

在第二次大循环中,第一次子循环,x=0,l=1;从第一数组array1中取出元素array1[0],从第二数组中取出array2[1],计算array1[0]*array2[1]表示;array1[0]*array2[1]=9*2=18。

该乘积结果18具有进位1,由于此时第三数组中array3[1]为7,将18和7进行加法运算,获得25,将5存储至array3[1]中,需要将2存储至array3[2],由于array3[2]已经存在值5,因此需要将2和5的加法运算结果存储至array3[2],即将7存储至array3[2]。依次类推,执行array2[1]与第一数组中其他元素相乘。

对于每次大循环,需要执行n=1024次子循环;共需要执行m=1023次大循环。最终的乘积结果如图6所示。第三数组存储有最终结果,该结果包括2046位数,即array3[0]=8,array3[1]=5,array3[2]=4,array3[3]=8,……,array3[2040]=7,array3[2041]=2,array3[2042]=6,array3[2043]=0,array3[2044]=6,array3[2045]=2。

第三种,除法。

如图8所示,为本申请实施例提供的一种数据处理方法中除法运算方法的一种实现方式的流程图,该方法包括:

s51:从所述第一数组array1中取出元素array1[n-1]至array1[x1],获得第一子数值,x1为n-m或n-m-1,所述第一子数值大于或等于所述第二数值。

s52:获取所述第一子数值与a1*所述第二数值的差值,所述差值为小于所述第二数值且大于或等于0的整数,将a1存储至第三数组array3[x1],a1为正整数。

s53:从所述第一数组array1中取出元素array1[xi-1-1]至array1[xi],将元素array1[xi-1-1]至array1[xi]对应的值与所述差值组成的数值作为第i子数值,i大于或等于2。

s54:若所述第i子数值大于或等于所述第二数值,获取所述第i子数值与ai*所述第二数值的差值,所述差值为小于所述第二数值且大于或等于0的整数,将ai存储至第三数组array3[xi],将所述第三数组中array3[xi-1]至array3[xi-1]的值设置为0,ai为正整数。

s55:若xi大于0,将i+1赋值给i,返回步骤s53;

s56:若xi为0,结束。

为了本领域技术人员更加理解本申请实施例提供的除法运算方法,下面举一具体例子进行说明,如图9所示,为本申请实施例提供的一种数据处理方法中除法运算方法的示例图。

假设第一数值为123456789,第一数组为:array1[0]=9,array1[1]=8,array1[2]=7,array1[3]=6,array1[4]=5,array1[5]=4,array1[6]=3,array1[7]=2,array1[8]=1;第二数值为789,第二数组为:array1[0]=9,array1[1]=8,array1[2]=7。

步骤s51中,由于123小于789,而1234大于789,所以需要取出1234等4个元素,步骤s52中1234-1*789=455<789,因此,将a1即1存储至array3[5];在第一次循环中,步骤s53从第一数组中取出元素array1[4]=5,与差值455组成第二子数值;步骤s54中4555-5*789=510<789,将a2即5存储至array3[4];在本申请实施例中x1=5,x2=4,由于x2>0,所以需要返回步骤s53进行第二次循环;第二次循环,步骤s53从第一数组中取出array1[3]=6,即x3=3,与差值510组成5106这一第三子数值;步骤s54中5106-6*789=372<789,因此将a3=6存储至array3[3]中;在本申请实施例中,由于x3=3>0,所以需要返回步骤s53,进行第三次循环,依次类推;直至第五次循环过程中,x6=0,且5106-6*789=372<789,所以结束。

优选的,将第三数组中array3[6]至array3[10]删除,使得第三数组中保留array3[0]至array3[5]。

本申请实施例还提供了一种数据处理装置,如图10所示,为本申请实施例提供的数据处理装置的结构图,该数据处理装置包括:

数据类型转换模块1001,用于将待运算的第一数值转换成第一字符串,以及将待运算的第二数值转换成第二字符串;

第一创建模块1002,用于基于所述第一字符串创建第一数组,以及基于所述第二字符串创建第二数组。

其中,所述第一数组包括的连续n个第一元素的值组成所述第一字符串,一个第一元素的值为所述第一字符串中的一个字符,n为所述第一字符串的长度;所述第二数据包含的连续m个第二元素的值组成所述第二字符串,一个第二元素的值为所述第二字符串中的一个字符,m为所述第二字符串的长度。

第二创建模块1003,用于创建第三数组,所述第三数组用于存储所述第一数值和所述第二数值的计算结果,所述第三数组包含的元素个数q大于或等于m与n之和。

第一计算模块1004,用于基于所述第一数值和所述第二数值的运算类型,依次从所述第一数组中取出至少一个第一元素;针对取出的所述至少一个第一元素,从所述第二数组中取出相应的至少一个第二元素;分别对每次取出的所述至少一个第一元素以及相应的所述至少一个第二元素进行运算,获得中间结果。

第二计算模块1005,用于基于各中间结果获取所述第一数值和所述第二数值的计算结果。

存储模块1006,用于将所述计算结果存储在所述第三数组中。

可选的,第一计算模块包括:

第一数据类型转换单元,用于将所述至少一个第一元素转换成第三数值,将所述至少一个第二元素转换成第四数值;

第一获取单元,用于基于所述运算类型,获得所述第三数值和所述第四数值的中间结果。

可选的,第一创建模块包括:

第一创建单元,用于创建与所述第一字符串长度相同的所述第一数组array1,n为所述第一数组包含的元素个数。

第一赋值单元,用于将所述第一字符串中的各字符从右到左依次赋值给所述第一数组中偏移地址从小到大的各第一元素。

第二创建单元,用于创建与所述第二字符串长度相同的所述第二数组array2,m为所述第二数组包含的元素个数。

第二赋值单元,用于将所述第二字符串中的各字符从右到左依次赋值给所述第二数组中偏移地址从小到大的各第二元素。

可选的,运算类型为加法,n大于或等于m,第一计算模块包括:

第二获取单元,用于从所述第一数组array1中取出array1[x];以及,从所述第二数组array2取出array2[x],array1[x]与array2[x]为同一数位,n、m、x为整数;

第一检测单元,用于检测第三数组array3中array3[x]的是否为空值,若为空值,触发第三获取单元;若不为空值,触发第四获取单元;

第三获取单元,用于基于array1[x]与array2[x]获得中间结果;

第四获取单元,用于基于array1[x]、array2[x]以及array3[x]获得中间结果;

第一存储单元,用于若获得中间结果过程中有进位时,将中间结果的高位存储至第三数组array3[x+1]中,将中间结果的低位存储至array3[x]中;若获得中间结果过程中无进位,将中间结果存储至array3[x]中;

第一触发单元,用于若x+1小于或等于m-1,将x+1赋值给x,触发第二获取单元;

第二触发单元,用于若x+1大于m-1,且小于或等于n-1,将x+1赋值给x,若array3[x]不为空值,基于array1[x]与array3[x]获得中间结果;触发所述第四赋值单元;若array3[x]为空值,将array1[x]赋值给array3[x],触发所述第四赋值单元;

第一结束单元,若x+1大于n-1,结束。

可选的,运算类型为减法,其中,第一数值为减数,第二数值为被减数,n大于或等于m,第一计算模块包括:

第四获取单元,用于从所述第一数组array1中取出array1[x];以及,从所述第二数组array2取出array2[x],array1[x]与array2[x]为同一数位;

第二检测单元,用于检测第三数组array3中array3[x]的是否为空值,若为空值,则触发第五获取单元,若不为空值,则触发第六获取单元;

第五获取单元,用于基于array1[x]与array2[x]获得中间结果;

第六获取单元,用于基于array3[x]以及array2[x]获得中间结果;

第二存储单元,用于若获得中间结果的过程中有借位,将array1[x+1]-1的结果存储至第三数组array3[x+1]中,并将中间结果的低位存储至array3[x]中;若获得中间结果的过程中无借位,将中间结果存储至array3[x]中;

第三触发单元,用于、若x+1小于或等于m-1,将x+1赋值给x,触发第四获取单元;

第四触发单元,用于若x+1大于m-1,且小于或等于n-1,将x+1赋值给x,若array3[x]不为空值,触发第四触发单元;若array3[x]为空值,将array1[x]赋值给array3[x],触发第四触发单元;

第二结束单元,用于若x+1大于n-1,结束。

可选的,运算类型为乘法,n大于或等于m,第一计算模块包括:

第七获取单元,用于从所述第一数组array1中取出array1[x];

第八获取单元,用于从所述第二数组array2取出array2[l],n、m、x、l为整数;

第九获取单元,用于基于array1[x]与array2[l],获取乘积结果;

第十获取单元,用于基于所述乘积结果与第三数组中元素array3[x]对应的值,获取更新至第三数组中元素array3[x]的值以及元素array3[x+1]的值;

第五触发单元,用于若x+1小于或等于n-1,将x+1赋值给x,触发第七获取单元;

第六触发单元,用于若x+1大于n-1,且l+1小于或等于m-1,将0赋值给x,将l+1赋值给l,返回步第七获取单元;

第三结束单元,用于若l+1大于m-1,结束。

可选的,运算类型为除法,所述第一数值为除数,所述第二数值为被除数,n大于或等于m,第一计算模块包括:

第十一获取单元,用于从所述第一数组array1中取出元素array1[n-1]至array1[x1],获得第一子数值,x1为n-m或n-m-1,所述第一子数值大于或等于所述第二数值;

第十二获取单元,用于获取所述第一子数值与a1*所述第二数值的差值,所述差值为小于所述第二数值且大于或等于0的整数,将a1存储至第三数组array3[x1],a1为正整数;

第一组成单元,用于从所述第一数组array1中取出元素array1[xi-1-1]至array1[xi],将元素array1[xi-1-1]至array1[xi]对应的值与所述差值组成的数值作为第i子数值,i大于或等于2;

第十三获取单元,用于若所述第i子数值大于或等于所述第二数值,获取所述第i子数值与ai*所述第二数值的差值,所述差值为小于所述第二数值且大于或等于0的整数,将ai存储至第三数组array3[xi],将所述第三数组中array3[xi-1]至array3[xi-1]的值设置为0,ai为正整数;

第七触发单元,用于若xi大于0,将i+1赋值给i,触发第一组成单元;

第四结束单元,用于若xi为0,结束。

如图11所示,为本申请实施例提供的一种电子设备的结构图,该电子设备包括:

存储器1101,用于存储程序;

存储器1101可能包含高速ram存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。

处理器1102,用于执行所述程序,所述程序具体用于:

将待运算的第一数值转换成第一字符串,以及将待运算的第二数值转换成第二字符串;

基于所述第一字符串创建第一数组,以及基于所述第二字符串创建第二数组;

其中,所述第一数组包括的连续n个第一元素的值组成所述第一字符串,一个第一元素的值为所述第一字符串中的一个字符,n为所述第一字符串的长度;所述第二数据包含的连续m个第二元素的值组成所述第二字符串,一个第二元素的值为所述第二字符串中的一个字符,m为所述第二字符串的长度;

创建第三数组,所述第三数组用于存储所述第一数值和所述第二数值的计算结果,所述第三数组包含的元素个数q大于或等于m与n之和;

基于所述第一数值和所述第二数值的运算类型,依次从所述第一数组中取出至少一个第一元素;针对取出的所述至少一个第一元素,从所述第二数组中取出相应的至少一个第二元素;

分别对每次取出的所述至少一个第一元素以及相应的所述至少一个第二元素进行运算,获得中间结果;

基于各中间结果获取所述第一数值和所述第二数值的计算结果;

将所述计算结果存储在所述第三数组中。

处理器1102可能是一个中央处理器cpu,或者是特定集成电路asic(applicationspecificintegratedcircuit),或者是被配置成实施本发明实施例的一个或多个集成电路。

电子设备还可以包括通信接口1103以及通信总线1104,其中,存储器1101、处理器1102以及通信接口1103通过通信总线1104完成相互间的通信。

可选的,通信接口可以为通信模块的接口,如gsm模块的接口。

可选的,处理器在执行对所述至少一个第一元素以及所述至少一个第二元素进行运算,获得中间结果,具体用于:

将所述至少一个第一元素转换成第三数值,将所述至少一个第二元素转换成第四数值;

基于所述运算类型,获得所述第三数值和所述第四数值的中间结果。

可选的,处理器在执行基于所述第一字符串创建第一数组,以及基于所述第二字符串创建第二数组时,具体用于:

创建与所述第一字符串长度相同的所述第一数组array1,n为所述第一数组包含的元素个数;

将所述第一字符串中的各字符从右到左依次赋值给所述第一数组中偏移地址从小到大的各第一元素;

创建与所述第二字符串长度相同的所述第二数组array2,m为所述第二数组包含的元素个数;

将所述第二字符串中的各字符从右到左依次赋值给所述第二数组中偏移地址从小到大的各第二元素。

可选的,所述运算类型为加法,n大于或等于m,处理器在执行基于所述第一数值和所述第二数值的运算类型,依次从所述第一数组中取出至少一个第一元素;针对取出的所述至少一个第一元素,从所述第二数组中取出相应的至少一个第二元素,分别对每次取出的所述至少一个第一元素以及相应的所述至少一个第二元素进行运算,获得中间结果时,具体用于:

s21、从所述第一数组array1中取出array1[x];以及,从所述第二数组array2取出array2[x],array1[x]与array2[x]为同一数位,n、m、x为整数;

s22、检测第三数组array3中array3[x]的是否为空值,若为空值,则执行步骤s23;若不为空值,则执行步骤s24;

s23、基于array1[x]与array2[x]获得中间结果;

s24、基于array1[x]、array2[x]以及array3[x]获得中间结果;

s25、若获得中间结果过程中有进位时,将中间结果的高位存储至第三数组array3[x+1]中,将中间结果的低位存储至array3[x]中;若获得中间结果过程中无进位,将中间结果存储至array3[x]中;

s26、若x+1小于或等于m-1,将x+1赋值给x,返回步骤从所述第一数组array1中取出array1[x];

s27、若x+1大于m-1,且小于或等于n-1,将x+1赋值给x,若array3[x]不为空值,基于array1[x]与array3[x]获得中间结果;返回步骤s25;若array3[x]为空值,将array1[x]赋值给array3[x],返回步骤s27;

s28、若x+1大于n-1,结束。

可选的,述运算类型为减法,n大于或等于m,其中,第一数值为减数,第二数值为被减数,处理器在执行基于所述第一数值和所述第二数值的运算类型,依次从所述第一数组中取出至少一个第一元素;针对取出的所述至少一个第一元素,从所述第二数组中取出相应的至少一个第二元素,分别对每次取出的所述至少一个第一元素以及相应的所述至少一个第二元素进行运算,获得中间结果时,具体用于:

s31、从所述第一数组array1中取出array1[x];以及,从所述第二数组array2取出array2[x],array1[x]与array2[x]为同一数位;

s32、检测第三数组array3中array3[x]的是否为空值,若为空值,则执行步骤s33,若不为空值,则执行步骤s34;

s33、基于array1[x]与array2[x]获得中间结果;

s34、基于array3[x]以及array2[x]获得中间结果;

s35、若获得中间结果的过程中有借位,将array1[x+1]-1的结果存储至第三数组array3[x+1]中,并将中间结果的低位存储至array3[x]中;若获得中间结果的过程中无借位,将中间结果存储至array3[x]中;

s36、若x+1小于或等于m-1,将x+1赋值给x,返回步骤s31;

s37、若x+1大于m-1,且小于或等于n-1,将x+1赋值给x,若array3[x]不为空值,返回步骤s37;若array3[x]为空值,将array1[x]赋值给array3[x],返回步骤s37;

s38、若x+1大于n-1,结束。

可选的,所述运算类型为乘法,n大于或等于m,处理器在执行基于所述第一数值和所述第二数值的运算类型,依次从所述第一数组中取出至少一个第一元素;针对取出的所述至少一个第一元素,从所述第二数组中取出相应的至少一个第二元素,分别对每次取出的所述至少一个第一元素以及相应的所述至少一个第二元素进行运算,获得中间结果时,具体用于:

s41、从所述第一数组array1中取出array1[x];

s42、从所述第二数组array2取出array2[l],n、m、x、l为整数;

s43、基于array1[x]与array2[l],获取乘积结果;

s44、基于所述乘积结果与第三数组中元素array3[x]对应的值,获取更新至第三数组中元素array3[x]的值以及元素array3[x+1]的值;

s45、若x+1小于或等于n-1,将x+1赋值给x,返回步骤s41;

s46、若x+1大于n-1,且l+1小于或等于m-1,将0赋值给x,将l+1赋值给l,返回步骤s41;

s47、若l+1大于m-1,结束。

可选的,所述运算类型为除法,所述第一数值为除数,所述第二数值为被除数,处理器在执行基于所述第一数值和所述第二数值的运算类型,依次从所述第一数组中取出至少一个第一元素;针对取出的所述至少一个第一元素,从所述第二数组中取出相应的至少一个第二元素,分别对每次取出的所述至少一个第一元素以及相应的所述至少一个第二元素进行运算,获得中间结果时,具体用于:

s51、从所述第一数组array1中取出元素array1[n-1]至array1[x1],获得第一子数值,x1为n-m或n-m-1,所述第一子数值大于或等于所述第二数值;

s52、获取所述第一子数值与a1*所述第二数值的差值,所述差值为小于所述第二数值且大于或等于0的整数,将a1存储至第三数组array3[x1],a1为正整数;

s53、从所述第一数组array1中取出元素array1[xi-1-1]至array1[xi],将元素array1[xi-1-1]至array1[xi]对应的值与所述差值组成的数值作为第i子数值,i大于或等于2;

s54、若所述第i子数值大于或等于所述第二数值,获取所述第i子数值与ai*所述第二数值的差值,所述差值为小于所述第二数值且大于或等于0的整数,将ai存储至第三数组array3[xi],将所述第三数组中array3[xi-1]至array3[xi-1]的值设置为0,ai为正整数;

s55、若xi大于0,将i+1赋值给i,返回步骤s53;

s56、若xi为0,结束。

本申请实施例还提供了一种存储介质,该存储介质存储有多条指令,所述指令适于处理器进行加载,以执行上述任一项所述的数据处理方法中的步骤。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1