</p> for(i = 0;i < tempnum.size();++i)% Q# S8 N# t/ x5 n& D: F
{) ~0 A$ c! q, J" E
int carry = 0;// 存储每位计算时来自低位的进位
c1 ?3 c# {+ t3 L for(j = 0;j < calcresult.size();++j)
* i' M8 u) A# Q% e9 v7 C9 n- v# W { x; T E. ~7 O" B4 Y! d( `; J
int bit1 = 0,bit2 = 0,res = 0;% @: R6 j: g! z) ?; B
bit1 = calcresult[j];9 v0 i! V a4 o* B0 t! T
bit2 = tempnum;
S) E: C+ T2 E1 v3 ~ res = bit1 * bit2;
5 r( C3 L$ ~# C3 M8 a2 ^" g // 保存当前位! G+ Y8 G$ b- Y8 l
if((i+j)
* P0 K2 z2 a/ _ {9 u' U% o, O* S0 c- J( o
// 临时结果中有对应位存在,则直接更新# n; p" f2 s# \1 o* J
rest[i+j] += (res + carry) % 10;, W4 X; l) K* [6 X8 V$ V
}
) F$ _5 a" Q k! ]9 D: \ else' g7 h7 Q6 F; ?
{! u e- p( a4 W3 S
// 没有对应位则需要添加
- }% D9 s- G9 C1 P) K rest.push_back((res+carry)%10);# G9 R: U) T2 ?. J
}8 S% x1 J6 G$ g, x, u# A/ {+ g
// 有进位,则更新进位
+ N) b( C- {/ [ carry = (res + carry) / 10;0 f9 y. { i+ G L y2 A1 D
}7 e/ i" c5 z2 E) m# F1 ^$ c. W
// 如果计算之后还有最高位的进位,那么则直接添加进去
# H8 b, i5 |+ c% d/ g/ H1 I* R6 e if(carry)4 p* l6 K' Y. z: c" M! ~( X
{ X O! r8 {/ o$ `+ {7 a* F. r
// 保存当前位
! B# R l2 f- V/ Z6 [7 a' _3 q1 Y# u if((i+j)* t4 O# I* V) t6 J5 m
{
* N2 ?6 S; C% }& e7 ~5 N$ o3 L; g // 临时结果中有对应位存在,则直接更新* _% z* }0 R# C/ |9 I7 e( b
rest[i+j] += carry;. c6 F8 F! U" n. }% I) S
}# b3 x) A! f6 `! R3 j% e, P- q
else
# ]) Z$ t3 C' ^) p# ] {) g7 L* I! ?) W' s& j# m2 d( B# Q
// 没有对应位则需要添加8 X7 r0 A4 D8 B6 l
rest.push_back(carry);
& S. z: Q6 v0 L& |" [$ a8 v# M }/ b- {& G3 f, ^
}, N9 w+ ^, K. m' U7 F
}
- X5 J7 n7 ?) V' [* G( P // 上述计算之后,会出现有些位的数字超过了10,那是因为在处理每一位运算结果之后
' l* W& |% u( m# K( E5 P // 相加时地位向高位可能存在进位,上面没有考虑,所以需要进行调整& T1 {) ^' S$ R @# U# V" S, A
for(i = 0;i < rest.size();++i)
$ U; m4 o2 k P( R/ W4 e {
2 H) X* S& X X* D' ~$ S if(rest > 9) s7 W1 {% m+ N# p8 N9 S4 j3 @. w
{3 w, Q! a0 j3 F
if((i+1) != rest.size())8 d" s/ `" O) u j* q: ^% c: |, U" ]
{
; Z% F9 v, a+ `9 n$ b1 F // 高位存在,则直接更新高位
. w) I2 L" K% Q, B) u% l$ I rest[i+1] += rest / 10;$ e3 B6 K6 x5 {2 \) _! c6 [) H4 Q
rest = rest % 10;
& W' f H! z2 i, c" D }
; Q8 r6 u: J4 ~' ]9 s% o9 j! k else
) a+ G# G. `3 F {
0 S. d3 E- F: e. j0 a6 y7 B& j# @ // 高位不存在,则需要插入) {( n4 [" o' L7 Z1 P
rest.push_back(rest / 10);
2 \' ^) K+ i9 S3 n4 L rest = rest % 10;
) \1 T, M$ j% Y3 k }: P- T! D; m* V) F
}
1 u, y1 Q% [( c( } P4 d/ _8 Q
8 b! R* \" x$ z- @7 N } |