一般的编译器认为 int 型是 4 个字节(32位),long long 型是 8 个字节(64位)。根据类型的取值范围可以知道,超过20位的整数加法就不能使用一般的数据类型直接相加了。
取值范围:
int -2^31 ~ 2^31-1 即 -2147483648 ~ 2147483647
unsigned int 0 ~ 2^32-1 即 0 ~ 4294967296
long long -2^63 ~ 2^63-1 即 -9223372036854775808~ 9223372036854775807
unsigned long long 0 ~ 2^64-1 即 0 ~ 18446744073709551615
将数据表示成string类型,再像平时我们做加法一样按位相加就可以计算大数加法了。具体代码如下:
string addStrings(string& num1, string& num2) {
// Write your code here
string 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;
}
else
jinwei = 0;
strResult.at(maxlen-i-1) = ch0 + sum;
}
if(jinwei) {
string str1("1");
strResult.insert(0, str1);
}
return strResult;
}