三种算法获取一个整数的每个数字

// getnumber.cpp : Defines the entry point for the console application.
//
// Author:shizhixin  
// Email:[email protected]  
// Blog:http://blog.csdn.net/shizhixin  
// Date:2012-05-06
/*
晚上无法入眠,随手翻开床头的编程珠玑看看,
做了做第三章的第8题,突然想做这样一个获取一个整数每个数字的小程序,
比如输入1131,输出1 1 3 1
程序给出了实现这个的三个算法,大致可以总结:
第一种方法是从大到小先取模后做除法,正序输出
第二种方法是从小到大先取模后做除法,不过做完后要逆序去零输出
第三种方法是先做除法后取模
个人认为第二种算法优于第一种,第三种算法优于第二种,
或许是我思维的一个过程,所以感觉总要有点进步才更新算法吧。
如果有更好更简单的算法实现的程序,欢迎交流!*/


#include "stdafx.h"
#include <math.h>
const int MAX_NUM_BIT = 5;

//参数异常判断
bool assert_para(int n)
{
	if (n<=0 || n>pow(10,MAX_NUM_BIT))
	{
		printf("input number must be > 0 and < pow(10,MAX_NUM_BIT)!");
		return false;
	}
	return true;
}

/*算法思想是先对10的幂从大到小取模
如果取模后的值与原来的值相等,则表示还未达到数的位数,继续下一幂
如果不等,则表示开始输出数
但是考虑到中间有零的情况,一旦开始输出数,
有相等情况应该是有0造成的*/
void func_getnumber1(int n)
{
    if (!assert_para(n))
    {
		return;
    }
	bool start = false;
	int m,k;
	for (int i=MAX_NUM_BIT; i>=0; i--)
	{
		m=n%int(pow(10,i));
		if (m!=n)
		{
			start = true;
			k = n/int(pow(10,i));
			printf("%d ",k);
			n=m;
		}
		else
		{
			if (start)
			{
				printf("0 ");
			}
		}
	}

}

/*算法思想是从小到大开始取模并输出个位十位等数,
然后将结果逆转并去掉前面的0输出*/
void func_getnumber2(int n)
{
    if (!assert_para(n))
    {
		return;
    }
	int m,k[MAX_NUM_BIT];
	for(int i=1;i<=MAX_NUM_BIT;i++)
	{
		m = n%int(pow(10,i));
		k[i-1] = m/int(pow(10,i-1));
	}

	bool flag = false;
	for (i=MAX_NUM_BIT; i>0; i--)
	{
		if (k[i-1]!=0)
		{
			flag = true;
		}
		if (flag)
		{
			printf("%d ",k[i-1]);
		}
		
	}
}

/*算法思想是直接从大到小的幂做除法运算,如果位数不够,除数为零,
不做输出,直到开始输出第一个数后,就算除法为零也输出结果*/
void func_getnumber3(int n)
{
    if (!assert_para(n))
    {
		return;
    }
	int m;
	bool start = false;
	for (int i=MAX_NUM_BIT; i>=0; i--)
	{
		m = n/int(pow(10,i));
		if (m!=0 || start)
		{
			start = true;
			printf("%d ",m);
			n = n%int(pow(10,i));
		}
	}
}


int main(int argc, char* argv[])
{
	int num = 0;
	printf("use the func_getnumber1:  ");
	func_getnumber1(num);
	printf("\n");

	printf("use the func_getnumber2:  ");
	func_getnumber2(num);
	printf("\n");

	printf("use the func_getnumber3:  ");
	func_getnumber3(num);
	printf("\n");

	return 0;
}


你可能感兴趣的:(编程,算法,Date,Blog,input,email)