1. 程式人生 > >把一個整數顛倒過來,123變成321

把一個整數顛倒過來,123變成321

//#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;
}
執行結果: