1. 程式人生 > >7-25 反轉數 (10 分)簡單+複雜 方法

7-25 反轉數 (10 分)簡單+複雜 方法

首先,思路很重要,這題可以10行內搞定,也可以打30行,效率肯定是不同的

放題先:

7-25 反轉數 (10 分)

輸入一個有符號整數,輸出該整數的反轉值。

輸入格式:
有符號整數

輸出格式:
有符號整數的反轉數

輸入樣例:
在這裡給出一組輸入。例如:
100
-123

輸出樣例:
在這裡給出相應的輸出。例如:
1
-321



簡單方法
PS:但要注意輸入為0的情況
先把輸入數最後的0都去掉,然後判斷符號,再逆序輸出
(我感覺這種方法還可以更簡單,行數更少,但因為我是從下面那個方法改過來的,所以可能有些瑕疵,湊合著看吧)

#include<stdio.h>
int main()
{
    int in,c=0,a=0;
    scanf("%d",&in);
    if(in<0)
    {
        in=-in;
        c++;
    }
    if(c!=0)
        printf("-");
    for(;in%10==0;)
    {
        if(in==0)
        {
          printf("%d",in);
          break;
        }  
        in=in/10;
    }
    for(;in!=0;)
    {
        a=in%10;
        in=in/10;
        printf("%d",a);
    }

    return 0;
}

複雜方法
PS:也要注意輸入為0的情況
我是走一步改一步,所以得出來的程式碼比較繁瑣,想到哪改到哪,我的思維模式就是這樣,你們要是說這個程式碼麻煩呀,複雜呀,那我沒脾氣的好吧


我當時打的時候是這麼想的:先考慮正負的符號問題,然後挨個位反轉,這時發現了0的問題,我又加了個輸出printf和變數b,一個printf負責輸出反轉後第一個非0的數(把反轉後首位前的0全都過濾掉),然後使變數++,然後if語句會使之後迴圈反轉的數都用另一個printf來輸出(非首位所以0也輸出)。

#include<stdio.h>
int main()
{
    int in,c=0,a=0,b=0;
    scanf("%d",&in);
    if(in<0)
    {
        in=-in;
        c++;
    }
    if(c!=0)
        printf("-");
    for(;;)
    {
        if(in==0)
            b++;
        a=in%10;
        in=in/10;
        if(a>0&&b==0)
        {
            b++;
            printf("%d",a);
            if(in==0)
                break;
            continue;
        }
        if(a>=0&&b!=0)
          printf("%d",a);
        if(in==0)
            break;
    }

    return 0;
}