链表的可以应用于多项式的表示,我本想使用一个指针链表来实现大数的存储,但是发现进行乘法运算很麻烦。我想起以前的一个题,是求100!的值,于是我心血来潮写一个99!的阶乘出来算了,实际上,要写几百的阶乘也可以,但是毕竟只作为一个算法,就记载下来吧。
#include "stdio.h" void Multi( int MultiNum, int * Num ){ //Num被乘数 ,MultiNum为乘数 int i; int Degree = 1; //处理被乘数具体位数的旗标,由于被乘数顶多为两位数 int k = 10; // int bitNum; //处理具体某位的数 int UpNum = 0; //进位 int Add[ 600 ] ; //加数 int Added[ 600 ] ; //被加数 for( i = 0; i < 600; i ++ ){ //初始化矩阵 Add[ i ] = 0; Added[ i ] = 0; } if( Degree == 1 ){ //与个位相乘的和 bitNum = MultiNum%k; for( i = 599; i >= 0; i -- ){ Added[ i ] = Num[ i ] * bitNum + UpNum; UpNum = Added[ i ]/10; Added[ i ] = Added[ i ]%10; } } Degree --; UpNum = 0; if( Degree == 0 ){ //与十位相乘的和 bitNum = MultiNum/k; for( i = 599; i > 0; i -- ){ Add[ i-1 ] = Num[ i ] * bitNum + UpNum; UpNum = Add[ i-1 ]/10; Add[ i-1 ] = Add[ i-1 ]%10; } }
for( i = 599; i >= 0; i -- ){ //加数与被加数相加 Num[ i ] = Added[ i ] + Add[ i ] + UpNum; UpNum = Num[ i ]/10; Num[ i ] = Num[ i ]%10; } } main(){ int Num[ 600 ] ; Num[ 599 ] = 1; int MultiNum; int i; int k = 0; for( i = 0; i < 599; i ++ ) Num[ i ] = 0; for( MultiNum = 99; MultiNum > 0; MultiNum -- ) Multi( MultiNum, Num ); for( i = 0; i <600; i ++ ) printf( "%d", Num[ i ] ); getchar(); }
|
阅读(2120) | 评论(0) | 转发(0) |