1 #include <iostream> 2 #include <string> 3 #include <iterator> 4 #include <algorithm> 5 6 using namespace std; 7 8 void addstring(string & str1, string & str2) 9 { 10 string out; 11 int c = 0;//设置进位 12 int sum = 0;//枚举每一位 13 for (unsigned int i = 0; i < str1.length(); i ++) 14 { 15 sum = str1[i]-'0'+str2[i]-'0' + c; 16 17 if (sum >= 10) 18 { 19 out[i] = sum%10 + '0'; 20 c = 1; 21 }else 22 { 23 out[i] = sum + '0'; 24 c = 0; 25 } 26 } 27 for (unsigned int i = str1.length(); i < str2.length(); i ++) 28 { 29 sum = str2[i]-'0'+c; 30 if (sum >= 10) 31 { 32 out[i] = sum%10 + '0'; 33 c = 1; 34 }else 35 { 36 out[i] = sum + '0'; 37 c = 0; 38 } 39 } 40 if (c == 1) out.push_back(1+'0'); 41 reverse(begin(out), end(out)); 42 43 cout << out; 44 45 46 } 47 48 49 int main() 50 { 51 string str1; 52 cin >> str1; 53 string str2; 54 cin >> str2; 55 string str3; 56 int c; 57 58 auto len1 = str1.length(); 59 auto len2 = str2.length(); 60 61 reverse(begin(str1), end(str1)); 62 reverse(begin(str2), end(str2)); 63 64 cout << "-------------------" << endl; 65 cout << str1 << endl; 66 cout << str2 << endl; 67 cout << "-------------------" << endl; 68 69 70 if (len1 < len2) addstring(str1, str2); 71 else addstring(str2, str1); 72 73 74 75 return 0; 76 }
这个程序是实现的超长正整数相加。编译没有问题,但是不显示结果啊。调了一天了,调试结果也好象没有问题啊。。 。
string out;
out[i] = sum%10 + '0';
不太懂啊,放哪在行啊?
@ii沙漠: 不是放哪儿行,我的意思是你没有给 out 分配内存,你就使用下标方式赋值了,这是错误的。
@Launcher: 谢谢。果然是啊。