2010年3月26日

摘要: 题意是将一个数字划分为几个数字,使得这几个数字的和尽可能接近一个给定的目标数。如果所有的划分都大于目标数,就输出error,如果有多种划分情况使得和最大,则输出rejected。一开始的想法是先考虑划分的个数,比如一个6位数,划分为6个数的话,这6个数的和如果大于目标数则不用再搜索了,因为这肯定是所有划分中和最小的,而最小都比目标数大,自然就没有合要求的答案了。由这个想法就用了迭代加深的回溯算法去... 阅读全文
posted @ 2010-03-26 23:07 ChimeraPanda 阅读(777) 评论(0) 推荐(1)

2010年3月18日

摘要: 跟加减法一样都是先实现*=、/=、%=再实现*、/、%。乘法的基本思路也是模拟笔算,不过在编程实现中并不急于处理进位,而是计算出所有部分和之后再一次过处理进位,所以里面用到一个unsigned int的向量,如果用string的话,由于char的范围太小,很容易溢出。除法用的是非常笨的方法,基本思想就是重复做减法,实际上就是一个试商的过程,只不过不是用乘来试商,而是用减法,用被除数的一截截去减除数... 阅读全文
posted @ 2010-03-18 18:03 ChimeraPanda 阅读(815) 评论(0) 推荐(0)

2010年3月11日

摘要: 用的是最基本的算法——模拟笔算。先实现无符号的加减法两个私有函数,再重载+=、-=操作符,最后用+=、-=分别实现+、-操作。如果先实现+、-,再用+、-实现+=、-=,则+=、-=需要多赋值一次,不如前面的方案好。 ++、--操作符分前缀和后缀,为了可以区分重载,后缀++、--的参数列表不为空,而是用一个int来使得参数列表非空,这个参数没有名字,也即仅起到区分作用,函数中不会使用这个参数。前缀... 阅读全文
posted @ 2010-03-11 21:37 ChimeraPanda 阅读(737) 评论(0) 推荐(0)

2010年2月28日

摘要: 多个函数需要用到无符号数值的比较,即需要比较绝对值,所以实现三个私有成员函数用来比较绝对值的大小。<=用!>来实现,同理>=用!<来实现,!=用!==来实现,所以只需要三个友元函数即可。对于无符号数值,字符串的大小跟数值的大小一致,由于‘+’的ASCII码比‘-’的小,所以判断符号位大小时则刚好相反。赋值由于有string重载了等号的便利,也很容易实现。对于不改变对象值的成... 阅读全文
posted @ 2010-02-28 15:27 ChimeraPanda 阅读(885) 评论(0) 推荐(0)

2010年2月27日

摘要: 对输入的字符串进行初始化,去掉前缀0,所有的0都统一为+0,不会有-0出现。输入会检查输入流状态,输出按照常规不输出正号。利用构造函数初始化列表先初始化私有数据成员可以提高效率,即直接调用string的构造函数先初始化,从而省去了先调用string默认构造函数,再在构造函数里面初始化私有数据成员的步骤。输入输出流要按常规返回流的引用。凡是引用的参数,如果不改变其值都要加const,如果是值传递则除... 阅读全文
posted @ 2010-02-27 13:40 ChimeraPanda 阅读(873) 评论(0) 推荐(0)
 
摘要: 经常遇到要进行大整数运算的情况,所以专门写一个大整数类,其中运算符重载的规则参考于《C++ Primer, 4th Edition》。 关于类的实现: 1、基本思想是用标准库中的string来存储数据,一位对应一个字符,首位是符号位,'+’ ‘-'分别代表正负,正号按常规不输出。只有+0,不会有-0出现。 2、实现了5个构造函数,可以用string,常量字符串,int及BigInt类型进行初始化。... 阅读全文
posted @ 2010-02-27 01:26 ChimeraPanda 阅读(1449) 评论(1) 推荐(0)