2016-03-22 49 views
0

我正試圖編寫一個程序來打印範圍[a,b]中的所有迴文。我已經寫了這個到目前爲止,但是我輸入a,b的值後沒有打印。什麼不見​​了?打印給定範圍內的所有迴文數字

#include "stdafx.h" 
#include <iostream> 
using namespace std; 

int t = 0, rmd, z, a, b; 

int reverse() { 
    while (z != 0) { 
     rmd = z% 10; 
     t = t * 10 + rmd; 
     z/= 10; 
     } 

    return t; 
} 

int palin() { 
    if (a == reverse()) { 
     return 1; 
    } 
    else 
     return 0; 

} 

int main() { 

    cout << "a: "; cin >> a; 
    cout << "b: "; cin >> b; 

    while (a <= b) { 
     z = a; 
     if (palin()) 
      cout << a << endl; 
     a++; 
    } 
    system("pause"); 
    return 0; 
} 
+0

它不是一個腳本這是 –

+1

你不重新初始化't'每次調用之前'扭轉程序()' –

+0

如果循環',而(A <= B)',你什麼時候期望'b molbdnilo

回答

1

你對變量的使用是令你困惑的。實際的問題是,每次調用reverse時都不會將t設置爲零,但應該考慮如何使用變量範圍以及實際執行哪些功能。現在你有2個程序,對全局數據執行操作。相反,嘗試使用接受參數的函數來形成問題,並返回結果。

#include <iostream> 

using namespace std; 

int reverse(int z) { 
    int t = 0; 

    int rmd; 
    while (z != 0) { 
     rmd = z % 10; 
     t = t * 10 + rmd; 
     z/= 10; 
    } 

    return t; 
} 

int palin(int z) { 
    return z == reverse(z); 
} 

int main() { 
    int a, b; 

    cout << "a: "; cin >> a; 
    cout << "b: "; cin >> b; 

    while (a <= b) { 
     if (palin(a)) { 
      cout << a << endl; 
     } 
     a++; 
    } 
    system("pause"); 
    return 0; 
} 
2

的問題是變量t不是你reverse()功能地方。它的值在下一次調用時仍然存在,所以反向結果變成與實際調用無關的垃圾。

您需要製作t本地到reverse()才能解決此問題。

通常,在不破壞代碼的情況下,養成在最內層範圍內聲明變量的習慣是一個好習慣。在這種情況下,對於其餘變量,這將是函數的範圍t,並且範圍main; palin應該以a爲參數。

相關問題