初看比较难写似的,仔细一分析,发现很简单: 先反转字符串 然后找到第一个非0数,该数-- 从这里往后找到第一个非9数,该数++ 然后,反转非9数前的所有数, 然后反转字符串 #include<cstring> #include<algorithm> #include<cstdio> using namespace std; void getnext(char num[],int total) //得到结果例置的数字 { reverse(num,num+total); unsigned i,j; for(i=0;i!=total && num[i]=='0';i++); for(j=i+1;num[j]=='9';j++); --num[i];++num[j]; reverse(num,num+j); if(num[total]) {num[total]+='0';num[total+1]=0;} reverse(num,num+total+(num[total]!=0)); } char str[1010]; int main() { int n; scanf("%d",&n); while(n--) { scanf("%s",str); getnext(str,strlen(str)); printf("%s/n",str); } }