1.字符串拷贝函数
//
//
// 字符串复制
//
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void my_copystr( char *src , char *des )
{
int des_length = strlen( des ) ;
int src_length = strlen( src ) ;
int i = 0 ;
if( des_length + 1 < src_length )
{
printf("目标字符串空间较小,不能完成复制!\n") ;
exit(0) ;
}
while( src[i] != '\0' )
{
des[i] = src[i] ;
i++ ;
}
des[i] = '\0' ;
}
int main()
{
char *src = "helo world" ;
char des[20] ;
my_copystr( src , des ) ;
printf("%s\n" , des ) ;
return 0 ;
}
2.实现一个大数类,要有加法操作。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std ;
class MyINT64 ;
istream & operator >> ( istream & is , MyINT64 &) ;
ostream & operator << ( ostream & os , const MyINT64 & ) ;
class MyINT64
{
public:
MyINT64( string str = "" )
{
this->str = str ;
length = str.length() ;
}
MyINT64 operator+ ( const MyINT64 & bigint ) ;
friend istream & operator >> ( istream & is , MyINT64 &) ;
friend ostream & operator << ( ostream & os , const MyINT64 & ) ;
public:
string str ;
int length ;
} ;
istream & operator >> ( istream & is , MyINT64 & bigint )
{
is >> bigint.str ;
return is ;
}
ostream & operator << ( ostream & os , const MyINT64 & bigint )
{
os << bigint.str ;
return os ;
}
// 将字符转化为数字
int eval( char c )
{
return int(c)-48 ;
}
// 将数字转化为对应字符
char strl( int i )
{
return char(i + 48) ;
}
//逆置
void Reverse( string &str )
{
int i = 0 ;
char tmp ;
for( ; i < str.length() / 2 ; i++ )
{
tmp = str[i] ;
str[i] = str[str.length()-1-i] ;
str[str.length()-1-i] = tmp ;
}
}
MyINT64 MyINT64::operator +( const MyINT64 & bigint )
{
int flag = 0 ; // 进位标志
int i = this->str.length() - 1 ;
int j = bigint.str.length() - 1 ;
int tmp = 0 ;
string str ;
int k = 0 ;
while( i >= 0 && j >= 0 )
{
tmp = eval( this->str[i] ) + eval( bigint.str[j] ) + flag ;
if( tmp >= 10 )
{
flag = 1 ;
tmp -= 10 ;
}
else
{
flag = 0 ;
}
str.append( 1 , strl(tmp)) ;
i-- ;
j-- ;
}
if( i < 0 && j < 0 && flag == 1)
{
str.append( 1 , '1') ;
}
if( i < 0 && j >= 0 )
{
for( k = j ; k >= 0 ; k-- )
{
tmp = flag + eval( bigint.str[k] ) ;
if( tmp >= 10 )
{
tmp -= 10 ;
flag = 1 ;
}
else
{
flag = 0 ;
}
str.append( 1 , strl(tmp) ) ;
}
}
if( j < 0 && i >= 0 )
{
for( k = i ; k >= 0 ; k-- )
{
tmp = flag + eval( this->str[k] ) ;
if( tmp >= 10 )
{
tmp -= 10 ;
flag = 1 ;
}
else
{
flag = 0 ;
}
str.append( 1 , strl(tmp) ) ;
}
}
Reverse( str ) ;
return MyINT64( str ) ;
}
int main()
{
MyINT64 number1 ;
MyINT64 number2 ;
MyINT64 number3 ;
cin >> number1 ;
cin >> number2 ;
number3 = number1 + number2 ;
cout << number3 << endl ;
return 0 ;
}
3.设计三个类:学生,教师,学校。实现的操作为:学校如何召集学生参加校庆.
#include <iostream>
using namespace std ;
class Student
{
public:
Student() { }
void response( int id )
{
printf("学生%d参加校庆\n\n",id) ;
}
protected:
char name[10] ;
char id[10] ;
char classNumber[10] ;
} ;
class Teacher
{
public:
Teacher() { number = 5 ; }
void request(int id) // 号召学生参加校庆
{
int i = 0 ;
for( ; i < number ; i++ )
{
printf("教师%d通知学生%d参加校庆\n",id,i) ;
stu[i].response(i) ;
}
}
protected:
Student stu[5] ;
int number ;
} ;
class School
{
public:
School() { number = 10 ; }
void request()
{
int i = 0 ;
for( ; i < number ; i++ )
{
printf("要求老师%d号召学生参加校庆\n",i) ;
teacher[i].request(i) ;
}
}
protected:
Teacher teacher[10] ;
int number ;
} ;
int main()
{
School school ;
school.request() ;
return ;
}
总结:题目简单,但是算法需要优化。