X.num[i] = 1;Р X.length = i+1;Р?}Р?elseР?{Р X.length = i;Р?}Р?return X;Р}РInteger Multiply::SameSignSubtract(Integer X, Integer Y)Р{Р?if(PositiveXGreaterThanY(X, Y)) //如果绝对值X>=YР?{Р int i;Р int carry_flag = 0; //借位Р bool first_0 = true; //高位第一次出现0Р int top_digit_0 = 0; //记录结果最高位+1的下标Р int top_digit = 0; //记录结果最高位下标Р for(i = 0; i < Y.length; i++)Р {Р if(X.num[i] - carry_flag < Y.num[i]) //需要向高位借位Р {Р X.num[i] = (X.num[i] - carry_flag + SCALE - Y.num[i]);Р carry_flag = 1;Р }Р elseР {Р X.num[i] = X.num[i] - carry_flag - Y.num[i];Р carry_flag = 0;Р }Р if(X.num[i] == 0) //高位出现0Р {Р if(first_0) //且是第一次出现0Р {Р first_0 = false; //再出现0则不是第一次出现0Р top_digit_0 = i; //记录结果最高位+1的下标Р }Р }Р elseР {Р first_0 = true;Р top_digit = i;Р }Р }Р if(carry_flag == 1) //最高位存在借位Р {Р X.num[i] = X.num[i] - carry_flag;