a038: 數字翻轉

2022.12.06 PM 10:00 by CBJ

來源 : https://zerojudge.tw/ShowProblem?problemid=a038
出題者 : jiangsir
標籤 : (Python)reversed()+str.join()、(C++)reverse()+stringstream、迴圈
難易度 : 2
解題想法 : 

。C - 迴圈
跑一個for i,從(字串長-1)走回0,即為反轉,而如何忽略前面多餘的0,我們可以照a034的老套路來實作,詳細可參考a034的題解(https://cbjsprogramdiary.com/2022/12/05/a034-%e4%ba%8c%e9%80%b2%e4%bd%8d%e5%88%b6%e8%bd%89%e6%8f%9b/)

要注意的地方是,正式測資中有一個case是00000...00,這時如果按照a034的做法的話會完全沒有輸出,解決辦法是,因為我們知道一定會有輸出,所以flag無論如何最後應該要變成1(true),因此我們可以在做完for i後另外判斷flag,若為0(false)則直接輸出0。

。C++ - reverse()+stringstream
首先將輸入字串用reverse()直接翻轉,再來將反轉後的字串丟入stringstream,再把stringstream倒進一個整數變數內,即可自動將前面不必要的0給去除。

(stringstream詳細用法&轉整數方法參考 : https://home.gamer.com.tw/creationDetail.php?sn=4114818)

。Python - reversed()+str.join()
首先將輸入字串用reversed()反轉,由於reversed()回傳的是list,因此可以利用''.join(reversed())的方式把reversed()回傳的list轉成str型態,再來即可使用int()把它轉成整數,並自動將前面不必要的0去除。
//C language

#include<stdio.h>
#include<string.h>
int main(){
    char s[10];
    scanf("%s",s);
    int flag=0;
    for(int i=strlen(s)-1;i>=0;i--){
        if(s[i]!='0') flag=1;
        if(flag) printf("%c",s[i]);
    }
    if(!flag)printf("0");
    printf("\n");
    return 0;
}
//C++ language

#include<iostream>
#include<string> //string 
#include<sstream>  //stringstream
#include<algorithm> //reverse()
using namespace std;
int main(){
    string s;
    cin>>s;
    reverse(s.begin(),s.end());
    stringstream ss(s);
    int ans;
    ss>>ans;
    cout<<ans<<"\n";
    return 0;
}
## Python language

print(int(''.join(reversed(input()))))

相關文章