⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ll.cpp

📁 此程序是一个加,减,乘,除的算法.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	c5 [ x ] = '\0' ;
	for ( j = 0 ; j < k ; j ++ )
	{
		for ( i = x - 1 ; i >= 0 ; i -- )
			c5 [ i + 1 ] = c5 [ i ] ;
		c5 [ 0 ] = '0' ;
		x ++ ;
	}
	c22 = c5 ;
	for ( ; *c11 != '\0' ; c11 ++ ) ;
	for ( ; *c22 != '\0' ; c22 ++ ) ;
	c11 -- ;
	c22 -- ;
	n = 0 ;
	c [ strlen ( c5 ) ] = '\0' ;
	for ( i = strlen ( c5 ) - 1  ; i >= 0 ; i -- , c11 -- , c22 -- )	{
		if ( ( *c11-'0'-n) - ( *c22 -'0' ) >= 0 )
		{
			k = ( *c11-'0'-n ) - ( *c22-'0' ) ;
			n = 0 ;
		}
		else
		{
		       k = ( *c11-'0'-n+10 ) - ( *c22-'0' ) ;
		       n = 1 ;
		}
		c [ i ] = k+'0' ;
	}
	if ( kk != 0 ) //取减后加入小数点
	{

		for ( y = 0 ; c [ y ] != '\0' ; y ++ ) ;
		if ( y <= kk )
		{
			y = kk - y + 1 ;
			x = strlen ( c ) ;
			for ( i = 0 ; i < y ; i ++ )
			{
				for ( j = x ; j >= 0 ; j -- )
				{
					c [ j + 1 ] = c [ j ] ;
				}
				x++ ;
				c [ 0 ] = '0' ;
			}
		}
		x = strlen ( c ) ;
		for ( i = x , j = 0 ; j <= kk ; j ++ , i -- )
		{
			c [ i + 1 ] = c [ i ] ;
		}
		c [ i + 1 ] = '.' ;
		x = strlen ( c ) ;
		x -- ;
		while ( c [ x ] == '0' )
		{
			c [ x ] = '\0' ;
			x -- ;
		}
	}
	if ( kk == 0 )
	{
	while ( c [ 0 ] == '0' )
	{
		for ( i = 0 ; c [ i ] != '\0' ; i ++ )
		c [ i ] = c [ i + 1 ] ;
	}
	}
	if ( c [ 0 ] == '\0')
	{
		c [ 0 ] = '0' ;
		c [ 1 ] = '\0' ;
	}
	return c ;
}

Boolean Numcmp ( char * c1 , char *c2 )
{
	int i , j , m , n , k , x , y ;
	char c [ 50 ] , *c3 , *c4 ;
	x = strlen ( c1 ) ;
	y = strlen ( c2 ) ;
	c3 = c1 ;
	c4 = c2 ;
	k = ( x - y ) > 0 ? x : y ;
	if ( x < k )
	{
		m = k - x ;
		strcpy ( c , c1 ) ;
		c [ k ] = '\0' ;
		for ( i = 0 ; i < m ; i ++ )
		{
			for ( j = x - 1 ; j >= 0 ; j -- )
			c [ j + 1 ] = c [ j ] ;
			c [ 0 ] = '0' ;
			x ++ ;
		}
		c3 = c ;
	}
	if ( y < k )
	{
		m = k - y ;
		strcpy ( c , c2 ) ;
		c [ k ] = '\0' ;
		for ( i = 0 ; i < m ; i ++ )
		{
			for ( j = y - 1; j >= 0 ; j -- )
			c [ j + 1 ] = c [ j ] ;
			c [ 0 ] = '0' ;
			y ++ ;
		}
		c4 = c ;
	}
	m = 0 ;
	for ( i = 0 ; *c3 != '\0' ; i ++ , c3 ++ , c4 ++ )
	{
		if ( ( *c3-'0' ) > ( *c4-'0' ) ) { m = 1 ; break ; }
		if ( ( *c3-'0' ) < ( *c4-'0' ) ) break ;
	}
	if ( *c3 == '\0' ) return true ;
	if ( m == 0 ) return false ;
	else return true  ;
}







char * Chu ( char *c1 , char *c2 )
{
	char c [ 50 ] , c3 [ 50 ] , c4 [ 50 ] , *c5 , *c6 , c7 [ 2 ] , c8 [ 50 ] , c9 [ 2 ] , c10 [ 50 ] , c11 [ 50 ] ;
	int i , j , k , m , n , nn , x , y , Wei , l , ll = 0 ;
	c7 [ 0 ] = '0' ;
	c7 [ 1 ] = '\0' ;
	strcpy ( c3 , c1 ) ;
	strcpy ( c4 , c2 ) ;
	j = m = 0 ;
	for ( i = 0 ; c3 [ i ] != '\0' ; i ++ ) // 取被除数的小数位数
	{
		if ( c3 [ i ] == '.' ) j = 1 ;
		else if ( j == 1 ) m ++ ;
	}
	j = n = 0 ;
	for ( i = 0 ; c4 [ i ] != '\0' ; i ++ )  //取除数的小数位数
	{
		if ( c4 [ i ] == '.' ) j = 1 ;
		else if ( j == 1 ) n ++ ;
	}
	k = 0 ;
	if ( m != 0 || n != 0 )  //取两者最大的小数位数并扩大到整数
	{
		 k = ( m - n ) > 0 ? m : n ;
		for ( i = 0 ; c3 [ i ] != '\0'; i ++ )
		{
			if ( c3 [ i ] == '.' )
			{
				for ( j = i ; c3 [ j ] != '\0' ; j ++ )
				c3 [ j ] = c3 [ j + 1 ] ;
				break ;
			}
		}
		if ( m != k )
		{
			x = strlen ( c3 ) ;
			m = k - m ;
			for ( i = 0 ; i < m ; i ++ )
			{
				c3 [ x ] = '0' ;
				x ++ ;
			}
			c3 [ x ] = '\0' ;
		}
		for ( i = 0 ; c4 [ i ] != '\0' ; i ++ )
		{
			if ( c4 [ i ] == '.' )
			{
				for ( j = i ; c4 [ j ] != '\0' ; j ++ )
				c4 [ j ] = c4 [ j + 1 ] ;
				break ;
			}
		}
		if ( n != k )
		{
			y = strlen ( c4 ) ;
			n = k - n ;
			for ( i = 0 ; i < n ; i ++ )
			{
				c4 [ y ] = '0' ;
				y ++ ;
			}
			c4 [ y ] = '\0' ;
		}
	}
	m = 0 ;
	while ( ! Numcmp ( c3 , c4 ) ) //被除数小于除数时将被除数扩大到大于除数
	{
		m ++ ;
		strcat ( c3 , c7 ) ;
	}
	y = strlen ( c4 ) ;
	Wei = 0 ;
	for ( i = 0 ; i < y ; i ++ ) //取被除数的除数位字符串
	{
		c8 [ i ] = c3 [ i ] ;
	}
	c8 [ i ] = '\0' ;     //c8[50]为截取的被除数
	Wei = i ;
	while ( ! Numcmp ( c8 , c4 ) ) //若字符串小于除数继续扩大
	{
		c8 [ i ] = c3 [ i ]  ;
		c8 [ ++ i ] = '\0' ;
		Wei = i ; //截取被除数的位置
	}
	printf ( "c8=%s\n" , c8 ) ;

	l = nn = 0 ;
	while ( 1 )
	{

		i = 1 ;
		while ( 1 )
		{
			c9 [ 0 ] = i+'0' ;
			c9 [ 1 ] = '\0' ;
			c5 = Cheng ( c4 , c9 ) ;
			strcpy (  c10 , c5 ) ;
			c5 = Jian ( c8 , c10 ) ;
			strcpy ( c11 , c5 ) ;// c11为被除数和除数的商
			if ( ! Numcmp ( c11 , c4 ) )
			{
				c [ nn ++ ] = c9 [ 0 ] ;
				break ;
			}
			i ++ ;
		}
		if ( strcmp ( c11 , c7 ) == 0 )
		{
			if ( c3 [ Wei ] == '\0' ) { c [ nn ] = '\0' ; break ;}//计算完成
			else
			{
				i = Wei ;
				while ( c3 [ i ] == '0' ) //判断被除数此位置以后是否全为零, 若全为零输出
				{
					if ( c3 [ i + 1 ] == '\0' )
					{
						c [ nn ] = '\0' ;
						for ( j = Wei ; c3 [ j ] != '\0' ; j ++ )
						{
							c9 [ 0 ] = c3 [ j ] ;
							c9 [ 1 ] = '\0' ;
							strcat ( c , c9 ) ;
						}
						goto loop ;
					}
					i ++ ;
				}
				c8 [ 0 ] = c3 [ Wei ++ ] ;
				c8 [ 1 ] = '\0' ;
				i = 1 ;
				while ( !Numcmp ( c8 , c4 ) )
				{
					c [ nn ++ ] = '0' ;
					if ( c3 [ Wei ] != '\0' )
					{
						c9 [ 0 ] = c3 [ Wei ] ;
						c9 [ 1 ] = '\0' ;
						strcat ( c8 , c9 ) ;
						Wei ++ ;
					}
					else
					{
						if ( l == 0 )
						{  l = 1 ; c [ nn ++ ] = '.' ;
						   strcat ( c8 , c7 ) ;
						}
						else strcat ( c8 , c7 ) ;
					}
				}
			}
		}
		else
		{
			strcpy ( c8 , c11 ) ;
			if ( c3 [ Wei ] != '\0')
			{
				c9 [ 0 ] = c3 [ Wei ++ ] ;
				c9 [ 1 ] = '\0' ;
				strcat ( c8 , c9 ) ;
				if ( ! Numcmp ( c8 , c4 ) )
				{
					while ( !Numcmp ( c8 , c4 ) )
					{
						c [ nn ++ ] = '0' ;
						if ( c3 [ Wei ] != '\0' )
						{
							c9 [ 0 ] = c3 [ Wei ++ ] ;
							c9 [ 1 ] = '\0' ;
							strcat ( c8 , c9 ) ;
						}
						else
						{
							if ( l == 0 )
							{
								c [ nn ++ ] = '.' ;
								strcat ( c8 , c7 ) ;
								l = 1 ;
							}
							else  strcat ( c8 , c7 ) ;
						}
					}
				}
			}
			else
			{
				if ( l == 0 )
				{ c [ nn ++ ] = '.' ; l = 1 ; }
				strcat ( c8 , c7 ) ;
				ll ++ ;
				if ( ll > 20 ) { c [ nn ] = '\0' ; break  ; }

				while ( !Numcmp ( c8 , c4 ) )
				{
					if ( l == 0 )
					{
						c [ nn ++ ] = '.' ;
						c [ nn ++ ] = '0' ;
						strcat ( c8 , c7 ) ;
						l = 1 ;
					}
					else
					{
						c [ nn ++ ] = '0' ;
						strcat ( c8 , c7 ) ;
					}
				}
			}
		}
	}
loop :  if ( m != 0 ) //取商后加入小数点
	{

		for ( y = 0 ; c [ y ] != '.' && c [ y ] != '\0' ; y ++ ) ;
		if ( y <= m )
		{
			y = m - y + 1 ;
			x = strlen ( c ) ;
			for ( i = 0 ; i < y ; i ++ )
			{
				for ( j = x ; j >= 0 ; j -- )
				{
					c [ j + 1 ] = c [ j ] ;
				}
				x++ ;
				c [ 0 ] = '0' ;
			}
		}
		ll = 0 ;
		for ( i = 0 ; c [ i ] !='\0' ; i ++ )
		{
			if ( c [ i ] == '.' )
			{
				for ( j = i ; j > i - m  ; j -- )
				{
					c7 [ 0 ] = c [ j ] ;
					c [ j ] = c [ j - 1 ] ;
					c [ j - 1 ] = c7 [ 0 ] ;
				}
				ll = 1 ;
				break ;
			}
		}
		if ( ll == 0 )
		{
			x = strlen ( c ) ;
			for ( i = x , j = 0 ; j <= m ; j ++ , i -- )
			{
				c [ i + 1 ] = c [ i ] ;
			}
			c [ i + 1 ] = '.' ;
		}
		x = strlen ( c ) ;
		x -- ;
		while ( c [ x ] == '0' )
		{
			c [ x ] = '\0' ;
		}
	}
	return c ;
}


void main ( )
{
	char c[ 50 ] , c1 [ 50 ] , *c2;
	int x , y , k , i , j , k1 ;
	clrscr ( ) ;
	gets ( c ) ;
	gets ( c1 ) ;
	c2 = Add ( c , c1 ) ;
	printf ( "%s %s %s "  , c2 , c , c1 ) ;
	c2 = Cheng ( c , c1 ) ;
	printf ( "%s %s %s ", c2 , c , c1 ) ;
//	c2 = Jian ( c , c1 ) ;
//	printf ( "%s %s %s " , c2 , c , c1 ) ;
//	k = Numcmp ( c , c1 ) ;
//	printf ( "%d %s %s " , k , c , c1 ) ;
	c2 = Chu ( c , c1 ) ;
	printf ( "c2 =%s %s %s " , c2 , c , c1 ) ;
	getch ( ) ;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -