对于超大数字的运算,用long long int仍然不能解决,这时候就需要考虑通过模拟运算和数组存储来实现高精度运算。
本文讨论借助C++的string来实现高精度的运算。
首先输入的量直接存储为string,设为s1和s2。
接下来设计一个反转函数,用于把整个字符串反转(为了方便后续计算)。
string reverseStr(string input){ string output = ""; for(int i = 0; i < input.length(); i++){ output.insert(output.begin(),input[i]); } return output; }
原理很简单,只需要取出string从前到后的每一个字符,每次都在头的前面插入,也就得到了反序。
下面讨论和的计算方式,先把s1和s2反转,这样从前到后遍历字符串时就是从低位到高位的顺序,设进位变量为carry,初始化为0,先处理s1和s2的公共部分,从低位开始,每次得到的位和为temp,先加上前面的进位carry,然后计算本位进位temp/10,和本位和数temp%10,把它插入到结果字符串的头部之前,即可得到公共部分的和数。
接下来对于s1或者s2多出的部分,单独处理,最后注意,如果处理结束后进位不是0,要进到下一位,具体代码如下:
首先定义用于char和int互转的两个函数:
int charToInt(char c){ return c - '0'; } char intToChar(int n){ return '0' + n; }
接下来是和的计算代码:
string sumofStr(string _s1, string _s2){ string s1 = reverseStr(_s1); string s2 = reverseStr(_s2); int pMax = s1.length() > s2.length() ? s2.length() : s1.length(); string sumStr = ""; int p; int carry = 0; int temp = 0; for(p = 0; p < pMax; p++){ temp = charToInt(s1[p]) + charToInt(s2[p]) + carry; carry = temp / 10; sumStr.insert(sumStr.begin(),intToChar(temp % 10)); } if(p < s1.length()){ for(; p < s1.length(); p++){ temp = charToInt(s1[p]) + carry; carry = temp / 10; sumStr.insert(sumStr.begin(),intToChar(temp % 10)); } } if(p < s2.length()){ for(; p < s2.length(); p++){ temp = charToInt(s2[p]) + carry; carry = temp / 10; sumStr.insert(sumStr.begin(),intToChar(temp % 10)); } } if(carry > 0){ sumStr.insert(sumStr.begin(),intToChar(carry % 10)); carry /= 10; } return sumStr; }
以上就是小编为大家带来的使用C++的string实现高精度加法运算的实例代码的全部内容了,希望对大家有所帮助,多多支持呐喊html" target="_blank">html" target="_blank">教程~
本文向大家介绍c++加法高精度算法的简单实现,包括了c++加法高精度算法的简单实现的使用技巧和注意事项,需要的朋友参考一下 c++高精度算法,对于新手来说还是一大挑战,只要克服它,你就开启了编程的新篇章,算法。 我发的这个代码并不是很好,占用内存很多而且运行时间很长(不超过1秒),但是很好理解,很适合新手 高精算法的本质就是把数组编程字符串,然后将字符串像竖式一样加起来: 以上就是小编为大家带来的
本文向大家介绍c++代码实现tea加密算法的实例详解,包括了c++代码实现tea加密算法的实例详解的使用技巧和注意事项,需要的朋友参考一下 通过c++来实现tea加密算法,最终编译成so文件,以JNI的方式提供给客户端调用,主要需要解决以下三个问题: 实现tea算法,这都有开源的代码可以实现; 解决padding问题; 密钥做一个混淆,防止编译生成的库文件方便的被逆向拿到; 对于tea的加密算法,
本文向大家介绍python实现kmp算法的实例代码,包括了python实现kmp算法的实例代码的使用技巧和注意事项,需要的朋友参考一下 kmp算法 kmp算法用于字符串的模式匹配,也就是找到模式字符串在目标字符串的第一次出现的位置 比如 abababc 那么bab在其位置1处,bc在其位置5处 我们首先想到的最简单的办法就是蛮力的一个字符一个字符的匹配,但那样的时间复杂度会是O(m*n) kmp算
本文向大家介绍C语言实现的PNPoly算法代码例子,包括了C语言实现的PNPoly算法代码例子的使用技巧和注意事项,需要的朋友参考一下 写C语言的实验用到的一个算法,判断一个点是否在多边形的内部。C的代码如下: 其中nvert是多边形顶点的个数,vertx和verty分别是多边形顶点横、纵坐标的数组,textx和testy是待测点的坐标。这个算法是由W. Randolph Franklin提出的,
本文向大家介绍C++实现DES加密算法实例解析,包括了C++实现DES加密算法实例解析的使用技巧和注意事项,需要的朋友参考一下 本文所述实例是一个实现DES加密算法的程序代码,在C++中,DES加密是比较常用的加密算法了,且应用非常广泛。本CPP类文件可满足你的DES加密需要,代码中附带了丰富的注释,相信对于大家理解DES可以起到很大的帮助。 具体实现代码如下: 感兴趣的朋友可以测试运行一下本文实
本文向大家介绍C语言实现九大排序算法的实例代码,包括了C语言实现九大排序算法的实例代码的使用技巧和注意事项,需要的朋友参考一下 直接插入排序 将数组分为两个部分,一个是有序部分,一个是无序部分。从无序部分中依次取出元素插入到有序部分中。过程就是遍历有序部分,实现起来比较简单。 折半插入排序 折半插入再直接插入上有改进,用折半搜索替换遍历数组,在数组长度大时能够提升查找性能。其本质还是从无序部分取出