这里是面试常见的字符串相关题目。
主要是字符串实现数字的加法,由于C中不支持String,这里用C++实现了。十进制与二进制就处理进位存在差异,其他都是一样的。
1. 十进制加法
#include <iostream>
#include <string>
using namespace std;
string addnum(string str1, string str2)
{
int len1 = str1.length();
int len2 = str2.length();
string ret = "";
int c1, c2, a = 0, sum;
while (len1 > 0 || len2 > 0) {
c1 = len1 > 0 ? str1[len1 - 1] - '0' : 0;
c2 = len2 > 0 ? str2[len2 - 1] - '0' : 0;
sum = c1 + c2 + a;
a = sum / 10;
ret = char((sum - a * 10) + '0') + ret;
len1--;
len2--;
}
if (a != 0) {
ret = char(a + '0') + ret;
}
return ret.length() > 0 ? ret : "0";
}
int main()
{
string str1 = "123456";
string str2 = "923457";
string str3 = addnum(str1, str2);
cout << str3 << endl; // 输出:1046913
str1 = "1";
str2 = "";
str3 = addnum(str1, str2); // 输出:1
cout << str3 << endl;
return 0;
}
2. 二进制加法
#include <iostream>
#include <string>
using namespace std;
string addbit(string str1, string str2)
{
int len1 = str1.length();
int len2 = str2.length();
string ret = "";
int c1, c2, a = 0, sum;
while (len1 > 0 || len2 > 0) {
c1 = len1 > 0 ? str1[len1 - 1] - '0' : 0;
c2 = len2 > 0 ? str2[len2 - 1] - '0' : 0;
sum = c1 + c2 + a;
a = sum / 2;
ret = char(sum - a * 2 + '0') + ret;
len1--;
len2--;
}
if (a != 0) {
ret = char(a + '0') + ret;
}
return ret.length() > 0 ? ret : "0";
}
int main()
{
string str1 = "110001";
string str2 = "100001";
string str3 = addbit(str1, str2);
cout << str3 << endl; // 输出:1010010
str2 = "";
str3 = addbit(str1, str2);
cout << str3 << endl; // 输出:110001
return 0;
}