/************************************************************************ ***By : summon *** ***Data : 2010.01.12 *** ***Function : 用霍纳法则求一个多项式p(x)=anX + an-1X + an-2X + ...+a0 *** *** 在给定的点X0的值 *** ***Version : V1.0 *** /************************************************************************/ #include "stdafx.h" #include <stdlib.h> #include <stdio.h> #include <string.h> #include <iostream.h> typedef int STATUS; #define MAX 100 STATUS Input(int *&coefficient, int *x0); STATUS HornerPrincile(int *coefficient, int x0, int *finalResult); STATUS Output(int finalResult); int count = 0; int main(int argc, char* argv[]) { int *coefficient = NULL; int x0; int finalResult; int ret = -1; ret = Input(coefficient, &x0); ret = HornerPrincile(coefficient, x0, &finalResult); ret = Output(finalResult); return 0; } STATUS Input(int *&coefficient, int *x0) { printf("Please input coefficient of the multinomial, an an-1 an-2 ... a0, with 'Enter' end:/n"); char temp[MAX] = {0}; fflush(stdin); cin.getline(temp, MAX); int len = strlen(temp); for (int i=0; i<len; i++) { if (temp[i] != ' ' && temp[i] != '+' && temp[i] != '-' && (temp[i] < 47 || temp[i] >57)) { printf("Input error!/n"); return 0; } if (temp[i] == ' ') { count++; } } coefficient = (int *)malloc((count+1)*sizeof(int)); int pos = -1; char tt[MAX] = {0}; int p = 0; for (int j=0; j<=len; j++) { if (temp[j] == ' ' || temp[j] == '/0') { memcpy(tt, &temp[pos+1], j-pos-1); coefficient[p] = atoi(tt); p++; pos = j; memset(tt, 0, MAX); } } printf("/n"); printf("Please input the x0:"); fflush(stdin); scanf("%d", x0); printf("Input end!/n"); return 1; } STATUS HornerPrincile(int *coefficient, int x0, int *finalResult) { if (coefficient == NULL || finalResult == NULL) { return 0; } int resultt; resultt = coefficient[0]; for (int i=1; i<count+1; i++) { resultt = resultt*x0 + coefficient[i]; } *finalResult = resultt; return 1; } STATUS Output(int finalResult) { printf("The result is : %d/n", finalResult); return 1; }