问题描述:将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';
}
算法复杂度:略。
原创文章转载请注明出处:BtBuzz的blog