📄 ll.cpp
字号:
#include<conio.h>
#include<stdio.h>
enum Boolean { false , true } ;
int strlen ( char *c )
{
int i ;
for ( i = 0 ; *c !='\0' ; c++ , i++ ) ;
return i ;
}
void strcpy ( char *c , char *c1 )
{
for ( ; *c1 != '\0' ; c1 ++ , c++ )
*c = *c1 ;
*c ='\0';
}
void strcat ( char *c , char *c1 )
{
for ( ; *c !='\0' ; c++ );
for ( ; *c1 !='\0' ; c1 ++ , c++)
*c = *c1 ;
*c = '\0' ;
}
int strcmp ( char *c , char *c1 )
{
for ( ; *c !='\0' && *c1 != '\0' ; c++ , c1++ )
if ( *c != *c1 ) return *c-*c1 ;
return 0 ;
}
char * Add ( char * c1 , char * c2 )
{
int i , j , x , y , k , k1 , m , n , kk ;
char c , *c11 , *c22 , c3 [ 50 ] , *c4 , c5 [ 50 ] , c6 [ 50 ] ;
strcpy ( c5 , c1 ) ;
strcpy ( c6 , c2 ) ;
j = m = 0 ;
for ( i = 0 ; c5 [ i ] != '\0' ; i ++ ) // 取被乘数的小数位数
{
if ( c5 [ i ] == '.' ) j = 1 ;
else if ( j == 1 ) m ++ ;
}
j = n = 0 ;
for ( i = 0 ; c6 [ i ] != '\0' ; i ++ ) //取乘数的小数位数
{
if ( c6 [ i ] == '.' ) j = 1 ;
else if ( j == 1 ) n ++ ;
}
k = 0 ;
if ( m != 0 || n != 0 ) //取两者最大的小数位数并扩大到整数
{
k = ( m - n ) > 0 ? m : n ;
for ( i = 0 ; c5 [ i ] != '\0'; i ++ )
{
if ( c5 [ i ] == '.' )
{
for ( j = i ; c5 [ j ] != '\0' ; j ++ )
c5 [ j ] = c5 [ j + 1 ] ;
break ;
}
}
if ( m != k )
{
x = strlen ( c5 ) ;
m = k - m ;
for ( i = 0 ; i < m ; i ++ )
{
c5 [ x ] = '0' ;
x ++ ;
}
c5 [ x ] = '\0' ;
}
for ( i = 0 ; c6 [ i ] != '\0' ; i ++ )
{
if ( c6 [ i ] == '.' )
{
for ( j = i ; c6 [ j ] != '\0' ; j ++ )
c6 [ j ] = c6 [ j + 1 ] ;
break ;
}
}
if ( n != k )
{
y = strlen ( c6 ) ;
n = k - n ;
for ( i = 0 ; i < n ; i ++ )
{
c6 [ y ] = '0' ;
y ++ ;
}
c6 [ y ] = '\0' ;
}
}
kk = k ;
// printf ( "c5=%s c6=%s k =%d\n" , c5 , c6 , k ) ;
// getch ( ) ;
x = strlen ( c5 ) ;
y = strlen ( c6 ) ;
k = x - y > 0 ? x : y ;
c5 [ k + 1 ] = '\0' ;
k1 = k + 1 - x ;
for ( i = 0 ; i < k1 ; i ++ )
{
for ( j = x ; j >= 0 ; j -- )
{
c5 [ j + 1 ] = c5 [ j ] ;
}
c5 [ 0 ] = '0' ;
x ++ ;
}
c6 [ k + 1 ] = '\0' ;
k1 = k + 1 - y ;
for ( i = 0 ; i < k1 ; i ++ )
{
for ( j = y ; j >= 0 ; j -- )
{
c6 [ j + 1 ] = c6 [ j ] ;
}
c6 [ 0 ] = '0' ;
y ++ ;
}
c11 = c5 ;
c22 = c6 ;
for ( ; *c11 != '\0' ; c11 ++ ) ;
for ( ; *c22 != '\0' ; c22 ++ ) ;
c11 -- ;
c22 -- ;
c3 [ k + 1 ] = '\0' ;
m = 0 ;
for ( i = y - 1 ; i >= 0 ; c11 -- , c22 -- , i -- )
{
k = ( * c11 - '0') + ( * c22 - '0' ) ;
k = k + m ;
if ( k > 9 )
{
c3 [ i ] = k % 10 + '0' ;
m = k / 10 ;
}
else
{
c3 [ i ] = k + '0' ;
m = 0 ;
}
}
while ( c3 [ 0 ] == '0' )
{
for ( i = 0 ; c3 [ i ] != '\0' ; i ++ )
c3 [ i ] = c3 [ i + 1 ] ;
}
if ( kk != 0 ) //取加后加入小数点
{
for ( y = 0 ; c3 [ y ] != '\0' ; y ++ ) ;
if ( y <= kk )
{
y = kk - y + 1 ;
x = strlen ( c3 ) ;
for ( i = 0 ; i < y ; i ++ )
{
for ( j = x ; j >= 0 ; j -- )
{
c3 [ j + 1 ] = c3 [ j ] ;
}
x++ ;
c3 [ 0 ] = '0' ;
}
}
x = strlen ( c3 ) ;
for ( i = x , j = 0 ; j <= kk ; j ++ , i -- )
{
c3 [ i + 1 ] = c3 [ i ] ;
}
c3 [ i + 1 ] = '.' ;
x = strlen ( c3 ) ;
x -- ;
while ( c3 [ x ] == '0' )
{
c3 [ x ] = '\0' ;
x -- ;
}
if ( c3 [ x ] == '.' ) c3 [ x ] = '\0' ;
}
if ( c3 [ 0 ] == '\0' )
{ c3 [ 0 ] = 0 ; c3 [ 1 ] = '\0' ; }
return c3 ;
}
char * Cheng ( char * c1 , char * c2 )
{
int i , j , k , m , n , l , x , y , kk ;
char c [ 50 ] , c10 [ 50 ] , c20 [ 50 ] , *c11 , *c22 , *c3 , c4 [ 50 ] , *c5 , c6 [ 50 ] , *c7 , c8 [ 2 ] ;
strcpy ( c10 , c1 ) ;
strcpy ( c20 , c2 ) ;
j = m = 0 ;
for ( i = 0 ; c10 [ i ] != '\0' ; i ++ ) // 取被乘数的小数位数
{
if ( c10 [ i ] == '.' ) j = 1 ;
else if ( j == 1 ) m ++ ;
}
j = n = 0 ;
for ( i = 0 ; c20 [ i ] != '\0' ; i ++ ) //取乘数的小数位数
{
if ( c20 [ i ] == '.' ) j = 1 ;
else if ( j == 1 ) n ++ ;
}
k = 0 ;
if ( m != 0 || n != 0 ) //取两者最大的小数位数并扩大到整数
{
k = ( m - n ) > 0 ? m : n ;
for ( i = 0 ; c10 [ i ] != '\0'; i ++ )
{
if ( c10 [ i ] == '.' )
{
for ( j = i ; c10 [ j ] != '\0' ; j ++ )
c10 [ j ] = c10 [ j + 1 ] ;
break ;
}
}
if ( m != k )
{
x = strlen ( c10 ) ;
m = k - m ;
for ( i = 0 ; i < m ; i ++ )
{
c10 [ x ] = '0' ;
x ++ ;
}
c10 [ x ] = '\0' ;
}
for ( i = 0 ; c20 [ i ] != '\0' ; i ++ )
{
if ( c20 [ i ] == '.' )
{
for ( j = i ; c20 [ j ] != '\0' ; j ++ )
c20 [ j ] = c20 [ j + 1 ] ;
break ;
}
}
if ( n != k )
{
y = strlen ( c20 ) ;
n = k - n ;
for ( i = 0 ; i < n ; i ++ )
{
c20 [ y ] = '0' ;
y ++ ;
}
c20 [ y ] = '\0' ;
}
}
kk = 2*k ;
c11 = c10 ;
c22 = c20 ;
c5 = c11 ;
for ( i = 0 ; *c5 != '\0' ; c5 ++ , i ++ ) ;
for ( ; i >= 0 ; c5 -- , i -- )
* ( c5 + 1 ) = *c5 ;
*c11 = '0' ;
* ( c11 + strlen ( c10 ) + 1 ) = '\0' ;
x = strlen ( c11 ) ;
y = strlen( c22 ) ;
for ( ; *c11 != '\0' ; c11 ++ ) ;
for ( ; *c22 != '\0' ; c22 ++ ) ;
c11 -- ;
c22 -- ;
c3 = c11 ;
c [ x ] = '\0' ;
l = 0 ;
for ( i = y - 1 ; i >= 0 ; c22 -- , i -- )
{
c11 = c3 ;
n = 0 ;
for ( j = x - 1 ; j >= 0 ; c11 -- , j -- )
{
k = ( *c11 - '0')* ( *c22 -'0' ) ;
k = k + n ;
if ( k > 9 ) c [ j ] = k % 10 + '0' ;
else c [ j ] = k + '0' ;
n = k / 10 ;
}
if ( i == y - 1 )
{
strcpy ( c4 , c ) ;
}
else
{
l ++ ;
for ( m = 0 ; m < l ; m ++ )
c6 [ m ] = '0' ;
c6 [ m ] = '\0' ;
strcat ( c , c6 ) ;
c7 = Add ( c , c4 ) ;
strcpy ( c4 , c7 ) ;
}
for ( m = 0 ; m < 50 ; m ++ )
c [ m ] = '\0' ;
}
while ( c4 [ 0 ] == '0' )
{
for ( i = 0 ; c4 [ i ] != '\0' ; i ++ )
c4 [ i ] = c4 [ i + 1 ] ;
}
if ( kk != 0 ) //取乘后加入小数点
{
for ( y = 0 ; c4 [ y ] != '\0' ; y ++ ) ;
if ( y <= kk )
{
y = kk - y + 1 ;
x = strlen ( c4 ) ;
for ( i = 0 ; i < y ; i ++ )
{
for ( j = x ; j >= 0 ; j -- )
{
c4 [ j + 1 ] = c4 [ j ] ;
}
x++ ;
c4 [ 0 ] = '0' ;
}
}
x = strlen ( c4 ) ;
for ( i = x , j = 0 ; j <= kk ; j ++ , i -- )
{
c4 [ i + 1 ] = c4 [ i ] ;
}
c4 [ i + 1 ] = '.' ;
x = strlen ( c4 ) ;
x -- ;
while ( c4 [ x ] == '0' )
{
c4 [ x ] = '\0' ;
x -- ;
}
}
if ( c4 [ 0 ] == '\0' )
{
c4 [ 0 ] = '0' ;
c4 [ 1 ] = '\0' ;
}
return c4 ;
}
char * Jian ( char *c1 , char *c2 )
{
int i , j , k , m , n , x , y , kk ;
char c [ 50 ] , c10 [ 50 ] , c20 [ 50 ] , *c11 , *c22 , c5 [ 50 ] ;
x = strlen ( c1 ) ;
y = strlen ( c2 ) ;
strcpy ( c5 , c2 ) ;
strcpy ( c10 , c1 ) ;
strcpy ( c20 , c2 ) ;
j = m = 0 ;
for ( i = 0 ; c10 [ i ] != '\0' ; i ++ ) // 取被减数的小数位数
{
if ( c10 [ i ] == '.' ) j = 1 ;
else if ( j == 1 ) m ++ ;
}
j = n = 0 ;
for ( i = 0 ; c20 [ i ] != '\0' ; i ++ ) //取减数的小数位数
{
if ( c20 [ i ] == '.' ) j = 1 ;
else if ( j == 1 ) n ++ ;
}
k = 0 ;
if ( m != 0 || n != 0 ) //取两者最大的小数位数并扩大到整数
{
k = ( m - n ) > 0 ? m : n ;
for ( i = 0 ; c10 [ i ] != '\0'; i ++ )
{
if ( c10 [ i ] == '.' )
{
for ( j = i ; c10 [ j ] != '\0' ; j ++ )
c10 [ j ] = c10 [ j + 1 ] ;
break ;
}
}
if ( m != k )
{
x = strlen ( c10 ) ;
m = k - m ;
for ( i = 0 ; i < m ; i ++ )
{
c10 [ x ] = '0' ;
x ++ ;
}
c10 [ x ] = '\0' ;
}
for ( i = 0 ; c20 [ i ] != '\0' ; i ++ )
{
if ( c20 [ i ] == '.' )
{
for ( j = i ; c20 [ j ] != '\0' ; j ++ )
c20 [ j ] = c20 [ j + 1 ] ;
break ;
}
}
if ( n != k )
{
y = strlen ( c20 ) ;
n = k - n ;
for ( i = 0 ; i < n ; i ++ )
{
c20 [ y ] = '0' ;
y ++ ;
}
c20 [ y ] = '\0' ;
}
}
kk = k ;
c11 = c10 ;
c22 = c20 ;
x = strlen ( c10 ) ;
y = strlen ( c20 ) ;
strcpy ( c5 , c20 ) ;
k = x - y ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -