2017-01-02 73 views
0

這是一個倒數的公式嗎?算法倒數

例如123-321?

編號爲K

INV k = k%100 + K/10%,10 * 10 + K%10 * 100

我不知道我究竟寫的,我需要這種權利在學校的圖形算法

編輯任務:是的,我很愚蠢的xD我是初學者的xD

+0

我會分開計算更多,使他們更容易遵循,如'units = K%10;數十= ...;數百= ...;'然後當這些數字全部分開時,再次將它們合併爲'inv = 100 * units + 10 * ten + hundred;'。 –

+0

你對問什麼不是很清楚。 123-321是你收到的一個字符串,必須驗證它是一個迴文。你收到'123'並且必須返回'321'?你收到的號碼總是3位數字嗎? – AntonH

+0

我不需要寫這個程序,但是我會繪製一個3位數的算法。 這是好方法還是不好? 我的英文很抱歉xD –

回答

3

這個邏輯會幫助你。變量inverse是輸出。

 int num = 123; 
     double inverse = 0; 
     while (num != 0) 
     { 
      inverse = inverse * 10; 
      inverse = inverse + num % 10; 
      num = num/10;     
     } 
+2

爲什麼'inverse'的類型是'double'而不是'int'? –

+0

謝謝J. Piquard先生的評論......應該是int。但是雙倍也沒有問題。 –

0
#include <stdio.h> 
#include <stdlib.h> 

int main(void) { 
    int i = 123045 , j = 0,k=0; 

    while(i != 0) 
     { 
     j=i%10; 
     k = k *10 + j; 
     i /=10; 
    } 

    printf("%d\n", k); 
    return 0; 
} 

輸出 540321

+0

在while循環的每次迭代中,'i%10'將從右邊提取第一個數字。這個數字由'j'結轉到'k',我們用整數除去'i'中的數字。 – Amjad

+2

這不適用於包含零的數字,例如12305,終止條件錯誤。 – axalis

+0

修改;感謝您提出這個! – Amjad

1

如果您希望您的代碼與任何數量的工作,可以考慮轉換爲字符串,然後扭轉它!

int invert(int input) 
{ 
    std::stringstream str; 
    str << input; 

    std::string s = str.str(); 
    std::reverse(s.begin(),s.end()); 

    return atoi(s.c_str()); 
} 
+0

我寧願直接在整數中做它,而不是做不必要的轉換到/從字符串(涉及動態內存分配btw。)。 – axalis