• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

第一次写高精度的错误

开发技术 开发技术 4小时前 1次浏览

加法

  1. 存储时忘了将string中的元素转化为数字

  2. 输出的时候忘记高位在后低位在前,没有倒序输出

  3. 只有单独一个数字时忘记考虑进位

    错误

    if (i > a.size()) t = b[i];
    if (i > b.size()) t = a[i];
    

    正确

    if (i > a.size()) t += b[i];
    if (i > b.size()) t += a[i];
    
  4. 忘记考虑最后两个高位相加可能产生的进位

    if (t) c.push_back(1);
    

减法

  1. 写错比较函数

    a. 分类不恰当

    b. 没有从倒过来比较(高位在后面)

    正确
    	if (a.size() != b.size()) return a.size() > b.size();
    	else{
    		for(int i = a.size() ;i >= 0; i--){
    			if (a[i] != b[i]) return a[i] > b[i];
    		}
    	}
    	return 1;
    错误
    	if (a.size() > b.size()) return 1;
    	else{
    		for(int i = 0 ;i < a.size(); i++){
    			if (a[i] > b[i]) return 1;
    			else return 0;
    		}
    	}
    	return 1;
    
  2. 没有考虑负号

    auto c = cmp(x, y) ? sub(x, y) : sub(y, x);
    for (int i = c.size() - 1; i >= 0; i--)
    	printf("%d", c[i]);
    

程序员灯塔
转载请注明原文链接:第一次写高精度的错误
喜欢 (0)