#include <iostream> #include <vector> #include <algorithm> using namespace std; int DJS_sum(int goal) { vector<int> djs;//存储所有递减数; vector<int> bitval; int maxSum = 0;//递减数中各位数之和最大的和 int maxval = 0;//递减数中各位数之和最大的递减数 while (goal) { int bit = goal % 10; bitval.push_back(bit); goal=goal/10; } if (bitval.size() <= 1) { return 0; } vector<int>::iterator iter1 = bitval.end() - 1;//指向整数的第一位 vector<int>::iterator iter2 = bitval.end() - 2;//指向整数的第二位 vector<int>::iterator iter;//保存开始iter1的值,算总长,因为之后iter1在变了 while (iter2 >= bitval.begin()) { int n =1; iter = iter1; while (*iter1 > *iter2&&iter2 >= bitval.begin()) { iter2--; iter1--; n++; } if (n>1) { int num = *iter; int sum = *iter; while (n - 1) { iter--; num = num * 10 + *iter; djs.push_back(num); sum += *iter; if (sum > maxSum) { maxSum = sum; maxval = num; } n--; } } else if (iter2 == bitval.begin()) { break; } else { iter1--; iter2--; } } sort(djs.begin(),djs.end()); int temp = *(djs.end() - 1); temp = temp + maxval; return temp; } void main() { int test; cin >> test; if (test < 0) { test = -test; } int sum = DJS_sum(test); cout << sum << endl; } </int></int></int></int></int></algorithm></vector></iostream>有更好的方法望指教!