兩個大數相加比較符合自然運算的算法
功能很簡單,就是實現兩個很長的大數相加的功能
1
public static string MaxNumAdd(string num1, string num2)
2
{
3
//初始設置進位為0
4
int carry = 0;
5
int length1 = num1.Length;
6
int length2 = num2.Length;
7
Stack<int> stack1 = new Stack<int>(length1);
8
Stack<int> stack2 = new Stack<int>(length2);
9
int max = length1;
10
if (max < length2)
11
{
12
max = length2;
13
}
14
//用于存放結果
15
Stack<int> stack3 = new Stack<int>(max + 1);
16
int size = max - length1;
17
while (size > 0)
18
{
19
stack1.Push(0);
20
size--;
21
}
22
size = max - length2;
23
while (size > 0)
24
{
25
stack2.Push(0);
26
size--;
27
}
28
for (int i = 0; i < length1; i++)
29
{
30
31
int num = Convert.ToInt32(num1[i].ToString());
32
stack1.Push(num);
33
}
34
for (int i = 0; i < length2; i++)
35
{
36
37
int num = Convert.ToInt32(num2[i].ToString());
38
stack2.Push(num);
39
}
40
//臨時施計算結果
41
int tempResult = 0;
42
for (int i = 0; i < max; i++)
43
{
44
int n1 = stack1.Pop();
45
int n2 = stack2.Pop();
46
tempResult = n1 + n2 + carry;
47
stack3.Push(tempResult);
48
if (tempResult > 9)
49
{
50
carry = 1;
51
}
52
else
53
{
54
carry = 0;
55
}
56
}
57
stack3.Push(carry);
58
StringBuilder sb = new StringBuilder();
59
while (stack3.Count > 0)
60
{
61
sb.Append(stack3.Pop().ToString());
62
}
63
return sb.ToString().TrimStart('0');
64
}
65
}
public static string MaxNumAdd(string num1, string num2)2
{3
//初始設置進位為04
int carry = 0;5
int length1 = num1.Length;6
int length2 = num2.Length;7
Stack<int> stack1 = new Stack<int>(length1);8
Stack<int> stack2 = new Stack<int>(length2);9
int max = length1;10
if (max < length2)11
{12
max = length2;13
}14
//用于存放結果15
Stack<int> stack3 = new Stack<int>(max + 1);16
int size = max - length1;17
while (size > 0)18
{19
stack1.Push(0);20
size--;21
}22
size = max - length2;23
while (size > 0)24
{25
stack2.Push(0);26
size--;27
}28
for (int i = 0; i < length1; i++)29
{30
31
int num = Convert.ToInt32(num1[i].ToString());32
stack1.Push(num);33
}34
for (int i = 0; i < length2; i++)35
{36
37
int num = Convert.ToInt32(num2[i].ToString()); 38
stack2.Push(num);39
}40
//臨時施計算結果41
int tempResult = 0;42
for (int i = 0; i < max; i++)43
{44
int n1 = stack1.Pop();45
int n2 = stack2.Pop();46
tempResult = n1 + n2 + carry;47
stack3.Push(tempResult);48
if (tempResult > 9)49
{50
carry = 1;51
}52
else53
{54
carry = 0;55
}56
}57
stack3.Push(carry);58
StringBuilder sb = new StringBuilder();59
while (stack3.Count > 0)60
{61
sb.Append(stack3.Pop().ToString());62
}63
return sb.ToString().TrimStart('0');64
}65
}
作者:jillzhang
出處:http://jillzhang.cnblogs.com/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
出處:http://jillzhang.cnblogs.com/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


浙公網安備 33010602011771號