Tags:,,, Posted in Algorithm Leave a Comment

问题描述:将char[]的字符串转换为int类型的整数并将int类型的整数转换为char[] 的字符串。其中字符串中只有0-9数字和‘-’。

解题关键:应用到了霍纳法则,这个思想很简单但是很重要,在手算和计算机的运算中能节省大量的运算量。因为人脑和计算机在进行加减运算时都快过乘除运算。

相关概念:霍纳法则(Horner Rule) 又名秦九昭法

把一个n次多项式f(x)=a[n]x^n+a[n-1]x^(n-1)+……+a[1]x+a[0]改写成如下形式: f(x)=a[n]x^n+a[n-1]x^(n-1))+……+a[1]x+a[0] =(a[n]x^(n-1)+a[n-1]x^(n-2)+……+a[1])x+a[0] =((a[n]x^(n-2)+a[n-1]x^(n-3)+……+a[2])x+a[1])x+a[0] =…… =(……((a[n]x+a[n-1])x+a[n-2])x+……+a[1])x+a[0]. 求多项式的值时,首先计算最内层括号内一次多项式的值,即 v[1]=a[n]x+a[n-1] 然后由内向外逐层计算一次多项式的值,即 v[2]=v[1]x+a[n-2] v[3]=v[2]x+a[n-3] …… v[n]=v[n-1]x+a[0] 这样,求n次多项式f(x)的值就转化为求n个一次多项式的值。 (注:中括号里的数表示下标) 上述方法称为秦九韶算法。直到今天,这种算法仍是多项式求值比较先进的算法 该算法看似简单,其最大的意义在于将求n次多项式的值转化为求n个一次多项式的值。在人工计算时,利用秦九韶算法和其中的系数表可以大幅简化运算;对于计算机程序算法而言,加法比乘法的计算效率要高很多,因此该算法仍有极大的意义,用于减少CPU运算时间。—From 百度百科

代码:

int StrToInt(char str[])
{
    int i = 0, isNeg = 0, num = 0;
    if(str[0] == '-')
    {
        isNeg = 1;
        i = 1;
    }
    while(str[i])
    {
        num *= 10;
        num += (str[i++] - '0')
    }
    if(isNeg)
        num *= -1;
    return;
}
#include <stdio.h>

#define MAX_DIGITS_INT 10  //定义整数所能容纳的最大的长度
#define MAX 10       //定义进制类型,二进制,十进制还是十六进制

void IntToStr(int num, char str[])
{

	char temp;

	int start = 0;
	int end, i;

	if(num < 0){      //判断是不是负数
		str[0] = '-';
		start = 1;
		num *= -1;
	}

	i = start;

	do{               //逆向存储字符串类型的数字 (不包括负号)
		str[i++] = (num%MAX) + '0';
		num /= MAX;
	}while(num);

	end = i - 1;

        while(start < end)   //反转字符串数字(不包括负号)
	{
		temp = str[start];
		str[start] = str[end];
		str[end] = temp;
		start++; end--;
	}
	str[i] = '\0';
}

算法复杂度:略。

 

June 29, 2011

原创文章转载请注明出处:BtBuzz的blog

本文链接: http://www.btbuzz.com/algorithm/94.html