字符反轉

目的

這道題我一開始寫的有些複雜,優化之後簡單了許多。所以想記錄下來。

題目大意:

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;

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