字符反转

目的

这道题我一开始写的有些复杂,优化之后简单了许多。所以想记录下来。

题目大意:

http://codevs.cn/problem/1130/

思路:

1:因为这个数字后面的0,翻转过来不输出,所以开始我想的是再用一个变量sum来同步后面的0,只要后面相邻是0,变量sum就减一,直到遇到不是零的数,sum就不用再减了,然后输出,下次循环的时候sum与i不同步,所以就不断输出,具体看代码。缺点太复杂。

代码:

# include <stdio.h>
# include <string.h>

int main(void)
{
    char str[30];   
    scanf("%s",str);
    if(str[0]=='-')
      {
        char s = str[0];
        printf("%c",s);
        int sum = strlen(str)-1;
        for(int i = strlen(str)-1; i>=1; i--)
       {
         if(str[i] == '0' && sum == i)
         {
            sum-=1;
            continue;
         }
        printf("%c",str[i]);         
        }
     }
     else
     {
        int sum = strlen(str)-1;
        for(int i = strlen(str)-1; i>=0; i--)
       {
         if(str[i] == '0' && sum == i)
         {
            sum-=1;
            continue;//这个很重要
         }
        printf("%c",str[i]);

        }   
     }  
    return 0;
}

2.后来看了另一个方法,它是用一个while循环来处理具体看代码。

#include <iostream>

#include <string>

using namespace std;



int main()

{

string str;

cin >> str;

if (str[0] == '-') cout << '-';  

int i = str.length() - 1;

while (str[i] == '0')//在这里排除了后面有0的情况

--i;

for ( ; i >= 0; --i)

if (str[i] != '-')

cout << str[i];

return 0;

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章