大数加法

来源:互联网 发布:四六级听力软件 编辑:程序博客网 时间:2024/06/04 20:56

一般的编译器认为 int 型是 4 个字节(32位),long long 型是 8 个字节(64位)。根据类型的取值范围可以知道,超过20位的整数加法就不能使用一般的数据类型直接相加了。

取值范围:

int -2^31 ~ 2^31-1 即 -2147483648 ~ 2147483647

unsigned int0 ~ 2^32-1 即0 ~ 4294967296

long long -2^63 ~ 2^63-1 即 -92233720368547758089223372036854775807

unsigned long long0 ~ 2^64-1 即018446744073709551615

将数据表示成string类型,再像平时我们做加法一样按位相加就可以计算大数加法了。具体代码如下:

string addStrings(string& num1, string& num2) {// Write your code herestring strResult;;int len1 = num1.length();int len2 = num2.length();char ch0 = '0';int jinwei = 0;int maxlen = len1 > len2 ? len1 : len2;strResult.resize(maxlen);for(int i = 0; i < maxlen; i++) {int sum = 0;int a1 = 0, a2 = 0;if (len1-i-1 >= 0 && len2-i-1 >=0 ) {a1 = charToint(num1.at(len1-i-1));a2 = charToint(num2.at(len2-i-1));}else if(len1-i-1 >= 0 && len2-i-1 <0) {a1 = charToint(num1.at(len1-i-1));a2 = 0;}else if(len1-i-1 < 0 && len2-i-1 >=0 ) {a1 = 0;a2 = charToint(num2.at(len2-i-1));}sum = a1 + a2 + jinwei;if(sum >= 10) {jinwei = 1;sum = sum - 10;}elsejinwei = 0;strResult.at(maxlen-i-1) = ch0 + sum;}if(jinwei) {string str1("1");strResult.insert(0, str1);}return strResult;}


原创粉丝点击