把一個整數顛倒過來,123變成321
阿新 • • 發佈:2019-01-02
執行結果://#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <math.h> //①for語句計算有多少位 int getwei(int &num) { int wei = 0; for (int inum = num; inum!=0; inum /= 10) //for (int inum = num; inum; inum /= 10)//這樣寫也可以 { ++wei; } return wei; } //②goto求取位數 int _go_to(int &k) { int i = k; //先拷貝,這樣就不會改變傳進來的num,避免num變成0影響下面的reverse。 int j = 0; AAA:if (i) { j++; i /= 10; goto AAA; } return j; } //③遞迴求取位數 int getdata(int &num) { if (num < 10) { return 1; } else { int i = num / 10; //i必須為左值,所以增加這一步 return 1 + getdata(i); } } int get10(int &n)//計算10的n次方 { int ret = 1; for (int i = 0; i != n; ++i) ret *= 10; return ret; } ////顛倒函式 例如:123456789 --> 987654321 int reverse(int & number,int &cnt)//傳進來的num值最終變為了0,可以增添一行拷貝語句來避免。 { int j = 0; for (int i = 0; i != cnt; ++i) { int k =number % 10; //每次取最低位,即個位。 %取餘數 number = number / 10; //每次剔除最低位。 int t = cnt - i-1; j = j + k*get10(t); //或者 j = j + k*(pow(10, (wei-i))); } return j; } //直接顛倒 int updown(int &i) { int num = i; int j= 0; while (num) { j*= 10; // 0 50 540 5430 54320 int wei = num % 10; // 5 4 3 2 1 j+= wei; // 5 54 543 5432 54321 num /= 10; // 1234 123 12 1 0 } return j; } int main() { int num; std::cout << "隨便輸入一個多位數num:"; std::cin >> num; int wei = getwei(num); //①for語句計算有多少位 std::cout <<"位數:"<<wei << ".逆序輸出為:" << reverse(num, wei)<< std::endl; std::cout << "\n再輸入一個多位數num:"; std::cin >> num; int wei1 = _go_to(num); //②goto求取位數 std::cout<< "位數:" << wei1 << ".逆序輸出為:" << reverse(num, wei1) << std::endl; std::cout << "\n再輸入一個多位數num:"; std::cin >> num; int wei2 = getdata(num); //③遞迴求取位數 std::cout <<"位數:"<<wei2<< ".逆序輸出為:" << reverse(num, wei2) << std::endl; std::cout << "\n再輸入一個多位數num:"; std::cin >> num; std::cout << "逆序輸出為:" << updown(num) << std::endl; system("pause"); return 0; }