题意:给定一个大数,这个大数的每一位数字由一个数组存储。给这个大数加1,输出加1后的数据。
思路:将容器向右扩大1位,作为临时存储空间。设置flag为进位标志,将flag与该位相加,结果存储在右移一位。难点在于,如果最高位为9,同时又有进位,则需要向前进一。例如999,则需要4个空间存储。
class Solution { public: vector<int> plusOne(vector<int> &digits) { int n = digits.size() + 1; digits.resize(n); int flag = 1; //进位标志,1为进位,0为不进位 int i; vector<int> aa; for(i=n-2; i>=0; i--) { if (flag + digits[i] == 10) { digits[i+1] = digits[i] + flag - 10; flag = 1; } else { digits[i+1] = digits[i] + flag; flag = 0; } } digits[0] = flag; i = ((flag == 0) ? 1 : 0); for(; i < n; i++) { aa.push_back(digits[i]); } return aa; } };