10进制字符串
#include <iostream>
#include <string>
using namespace std;
string addStrings(string num1, string num2) {
int len1 = num1.size(), len2 = num2.size(), add = 0;//add用于记录逐位相加的结果
if (len1 < len2)
return addStrings(num2, num1);//这里是为了使num1字串位数最长
for (int i = 1; i <= len1 && (add || i <= len2); i++, add /= 10) {//add除以10得到进位值,加到下一位
add += num1[len1 - i] - '0' + (i <= len2 ? num2[len2 - i] - '0' : 0);//逐位进行计算和
num1[len1 - i] = add % 10 + '0';//将得到的数在num1上进行更新
}
return (add ? to_string(add) : "") + num1;//这里是为了处理最高位的进位
}
void test() {
string str1,str2;
cout<<"size:"<<addStrings(string(1000,'5'),string(1000,'5')).size()<<endl<<addStrings(string(1000,'1'),string(1000,'1'))<<endl;
while(true){
cout<<"Please input 2 strings:"<<endl;
cin>>str1>>str2;
cout<<addStrings(str1,str2)<<endl;
}
}
任意进制字符串
#include <iostream>
#include <string>
using namespace std;
string addStrings(string num1, string num2, const int &format) {
int len1 = num1.size(), len2 = num2.size(), add = 0;//add用于记录逐位相加的结果
if (len1 < len2)
return addStrings(num2, num1,format);//这里是为了使num1字串位数最长
for (int i = 1; i <= len1 && (add || i <= len2); i++, add /= format) {//add除以10得到进位值,加到下一位
add += num1[len1 - i] - '0' + (i <= len2 ? num2[len2 - i] - '0' : 0);//逐位进行计算和
num1[len1 - i] = add % format + '0';//将得到的数在num1上进行更新
}
return (add ? to_string(add) : "") + num1;//这里是为了处理最高位的进位
}
void test() {
string str1,str2;
int format;
cout<<"size:"<<addStrings(string(1000,'5'),string(1000,'5'),10).size()<<endl<<addStrings(string(1000,'1'),string(1000,'1'),10)<<endl;
while(true){
cout<<"Please input 2 strings and format:"<<endl;
cin>>str1>>str2>>format;
cout<<addStrings(str1,str2,format)<<endl;
}
}