软件开发技术分享巨型整数相加减Word格式文档下载.docx
- 文档编号:21384974
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:17
- 大小:17.11KB
软件开发技术分享巨型整数相加减Word格式文档下载.docx
《软件开发技术分享巨型整数相加减Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《软件开发技术分享巨型整数相加减Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
14elseif(num2[0]!
num1[0]=="
)//若是前数为负
15{
16returnDoMinus(num2,num1.Substring
(1));
17}
18//若是两数都为负
19return"
+DoPlus(num1.Substring
(1),num2.Substring
(1));
20}
21publicstaticstringMinus(stringnum1,stringnum2)
22{
23if(!
24return"
25
26if(num1[0]!
)
27returnDoMinus(num1,num2);
28elseif(num1[0]!
29{
30returnDoPlus(num1,num2.Substring
(1));
31}
32elseif(num2[0]!
33{
34return"
+DoPlus(num1.Substring
(1),num2);
35}
36
37returnDoMinus(num2.Substring
(1),num1.Substring
(1));
38}
39//正则断定是否为整数
40privatestaticboolIsNumber(stringnum1,stringnum2)
41{
42Regexrgx=newRegex(@"
^-?
\d+¥"
);
43returnrgx.IsMatch(num1)&
rgx.IsMatch(num2);
44}
45//履行加法
46privatestaticstringDoPlus(stringnum1,stringnum2)
47{
48int[]maxNumberArray;
//存较大的操纵数
49int[]minNumberArray;
//存较小的操纵数
50if(num1.Length>
num2.Length)
51{
52maxNumberArray=ConvertStringToIntArrayAndReverse(num1);
53minNumberArray=ConvertStringToIntArrayAndReverse(num2);
54}
55else
56{
57maxNumberArray=ConvertStringToIntArrayAndReverse(num2);
58minNumberArray=ConvertStringToIntArrayAndReverse(num1);
59}
60inttmp,carry=0,i=0;
//存姑且的和、进位、轮回变量
61for(intlen=minNumberArray.Length;
i<
len;
i++)
62{
63//将两数对应的位以及前面的进位相加
64tmp=maxNumberArray[i]+minNumberArray[i]+carry;
65if(tmp>
9)//和有进位
66{
67maxNumberArray[i]=tmp%10;
68carry=tmp/10;
69}
70else//和没有进位
71{
72maxNumberArray[i]=tmp;
73carry=0;
74}
75}
76if(i<
maxNumberArray.Length)//若是较大的数还残剩有位,就将最后一次的进位参加高位
77{
78maxNumberArray[i]+=carry;
79returnReverseIntArrayAndToString(maxNumberArray);
80}
81elseif(carry!
=0)//若是两数长度相等,将最后一次的进位加在最前面
82{
83returncarry.ToString()+ReverseIntArrayAndToString(maxNumberArray);
84}
85else
86{
87returnReverseIntArrayAndToString(maxNumberArray);
88}
89}
90//履行减法
91privatestaticstringDoMinus(stringnum1,stringnum2)
92{
93int[]maxNumberArray=null;
94int[]minNumberArray=null;
95boolnegative=false;
//指导两数相减成果是否为负
96if(num1.Length>
97{
98maxNumberArray=ConvertStringToIntArrayAndReverse(num1);
99minNumberArray=ConvertStringToIntArrayAndReverse(num2);
100}
101elseif(num2.Length>
num1.Length)
102{
103maxNumberArray=ConvertStringToIntArrayAndReverse(num2);
104minNumberArray=ConvertStringToIntArrayAndReverse(num1);
105negative=true;
106}
107else//若是两数长度相等,经由过程轮回断定其大小
108{
109intlen=num1.Length;
110inti=0;
111for(;
112{
113if(num1[i]>
num2[i])
114{
115maxNumberArray=ConvertStringToIntArrayAndReverse(num1);
116minNumberArray=ConvertStringToIntArrayAndReverse(num2);
117break;
118}
119elseif(num1[i]<
120{
121maxNumberArray=ConvertStringToIntArrayAndReverse(num2);
122minNumberArray=ConvertStringToIntArrayAndReverse(num1);
123negative=true;
124break;
125}
126}
127if(i==len)//若是两数相等,返回成果0
128return"
0"
129}
130
131for(intj=0,len=minNumberArray.Length;
j<
j++)
132{
133//将两数对应位相减
134maxNumberArray[j]-=minNumberArray[j];
135if(maxNumberArray[j]<
0)//若是相减成果为负,用递归向高位借位
136{
137maxNumberArray[j]+=10;
138ComputeCarry(maxNumberArray,j+1);
139}
140}
141
142if(negative)
143return"
+ReverseIntArrayAndToString(maxNumberArray);
144returnReverseIntArrayAndToString(maxNumberArray);
145}
146//向高位借位的递归算法
147privatestaticvoidComputeCarry(int[]numberArray,intp)
148{
149if(numberArray[p]>
0)//若是高位够借位
150{
151numberArray[p]--;
152}
153else//若是高位不敷借,持续递归借位
154{
155numberArray[p]=9;
156ComputeCarry(numberArray,p+1);
157}
158}
159//将字符情势默示的数按位存入int数组,并反转过来以便于策画
160privatestaticint[]ConvertStringToIntArrayAndReverse(stringstr)
161{
162int[]result=newint[str.Length];
163for(inti=str.Length-1,j=0;
i>
=0;
i--,j++)
164{
165result[j]=Convert.ToInt32(str[i].ToString());
166}
167returnresult;
168}
169//向高位借位的递归算法
170privatestaticvoidComputeCarry(int[]numberArray,intp)
171{
172if(numberArray[p]>
173{
174numberArray[p]--;
175}
176else//若是高位不敷借,持续递归借位
177{
178numberArray[p]=9;
179ComputeCarry(numberArray,p+1);
180}
181}
182//将字符情势默示的数按位存入int数组,并反转过来以便于策画
183privatestaticint[]ConvertStringToIntArrayAndReverse(stringstr)
184{
185int[]result=newint[str.Length];
186for(inti=str.Length-1,j=0;
187{
188result[j]=Convert.ToInt32(str[i].ToString());
189}
190returnresult;
191}
192//向高位借位的递归算法
193privatestaticvoidComputeCarry(int[]numberArray,intp)
194{
195if(numberArray[p]>
196{
197numberArray[p]--;
198}
199else//若是高位不敷借,持续递归借位
200{
201numberArray[p]=9;
202ComputeCarry(numberArray,p+1);
203}
204}
205//将字符情势默示的数按位存入int数组,并反转过来以便于策画
206privatestaticint[]ConvertStringToIntArrayAndReverse(stringstr)
207{
208int[]result=newint[str.Length];
209for(inti=str.Length-1,j=0;
210{
211result[j]=Convert.ToInt32(str[i].ToString());
212}
213returnresult;
214}
215//向高位借位的递归算法
216privatestaticvoidComputeCarry(int[]numberArray,intp)
217{
218if(numberArray[p]>
219{
220numberArray[p]--;
221}
222else//若是高位不敷借,持续递归借位
223{
224numberArray[p]=9;
225ComputeCarry(numberArray,p+1);
226}
227}
228//将字符情势默示的数按位存入int数组,并反转过来以便于策画
229privatestaticint[]ConvertStringToIntArrayAndReverse(stringstr)
230{
231int[]result=newint[str.Length];
232for(inti=str.Length-1,j=0;
233{
234result[j]=Convert.ToInt32(str[i].ToString());
235}
236returnresult;
237}
238//向高位借位的递归算法
239privatestaticvoidComputeCarry(int[]numberArray,intp)
240{
241if(numberArray[p]>
242{
243numberArray[p]--;
244}
245else//若是高位不敷借,持续递归借位
246{
247numberArray[p]=9;
248ComputeCarry(numberArray,p+1);
249}
250}
251//将字符情势默示的数按位存入int数组,并反转过来以便于策画
252privatestaticint[]ConvertStringToIntArrayAndReverse(stringstr)
253{
254int[]result=newint[str.Length];
255for(inti=str.Length-1,j=0;
256{
257result[j]=Convert.ToInt32(str[i].ToString());
258}
259returnresult;
260}
261//向高位借位的递归算法
262privatestaticvoidComputeCarry(int[]numberArray,intp)
263{
264if(numberArray[p]>
265{
266numberArray[p]--;
267}
268else//若是高位不敷借,持续递归借位
269{
270numberArray[p]=9;
271ComputeCarry(numberArray,p+1);
272}
273}
274//将字符情势默示的数按位存入int数组,并反转过来以便于策画
275privatestaticint[]ConvertStringToIntArrayAndReverse(stringstr)
276{
277int[]result=newint[str.Length];
278for(inti=str.Length-1,j=0;
279{
280result[j]=Convert.ToInt32(str[i].ToString());
281}
282returnresult;
283}
1//将终极策画成果反转回来并拼成字符串
2privatestaticstringReverseIntArrayAndToString(int[]intArray)
3{
4IEnumerable<
int>
tmp=intArray.Reverse();
5StringBuilderstrBld=newStringBuilder();
6foreach(intiintmp)
7strBld.Append(i);
8returnstrBld.ToString().TrimStart("
9}
10}
本文由成都网站建设:
成都公司代理:
组织发布。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 开发 技术 分享 巨型 整数 相加