체인 테이블로 대정수 가산법 연산을 시뮬레이션하다

예: 9>9>9>NULL + 1>NULL = > 1>0>0>0>NULL
틀림없이 귀속을 사용할 것이다. 그렇지 않으면 진위+1문제를 해결할 수 없다. 왜냐하면 이때 앞의 노드에 1을 더해야 하기 때문이다. 우리의 단사슬표는 영원히 앞을 가리키기 때문이다.
또한 999+1=1000에 대해 새로 얻은 값의 자릿수(4위)는 원래의 두 값(1비트, 1비트, 3비트)보다 많기 때문에 우리는 표두의 값을 0으로 설정하고 한 사람이 더 오면 잠시 표두에 저장한다.귀속이 끝난 후, 만약 시계 헤드가 1이라면, 새로운 체인 시계 밖에 새로운 시계 헤드를 하나 더 추가한다.

  
  
  
  
  1. //head1 length > head2, so M > N 
  2. public static int Add(Link head1, Link head2, ref Link newHead, int M, int N) 
  3.     // goto the end 
  4.     if (head1 == null
  5.         return 0; 
  6.     int temp = 0; 
  7.     int result = 0; 
  8.     newHead = new Link(null, 0); 
  9.     if (M > N) 
  10.     { 
  11.         result = Add(head1.Next, head2, ref newHead.Next, M - 1, N); 
  12.         temp = head1.Data + result; 
  13.         newHead.Data = temp % 10; 
  14.         return temp >= 10 ? 1 : 0; 
  15.     } 
  16.     else // M == N 
  17.     { 
  18.         result = Add(head1.Next, head2.Next, ref newHead.Next, M - 1, N - 1); 
  19.         temp = head1.Data + head2.Data + +result; 
  20.         newHead.Data = temp % 10; 
  21.         return temp >= 10 ? 1 : 0; 
  22.     } 

여기에서 헤드1이 헤드2보다 길고 M, N은 각각 헤드1과 헤드2의 길이라고 가정한다.
다음에서 시작합니다.http://www.cnblogs.com/Jax/archive/2009/12/11/1621504.html
 

좋은 웹페이지 즐겨찾기