软件开发技术分享巨型整数相加减.docx

上传人:b****6 文档编号:8248691 上传时间:2023-01-30 格式:DOCX 页数:17 大小:17.11KB
下载 相关 举报
软件开发技术分享巨型整数相加减.docx_第1页
第1页 / 共17页
软件开发技术分享巨型整数相加减.docx_第2页
第2页 / 共17页
软件开发技术分享巨型整数相加减.docx_第3页
第3页 / 共17页
软件开发技术分享巨型整数相加减.docx_第4页
第4页 / 共17页
软件开发技术分享巨型整数相加减.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

软件开发技术分享巨型整数相加减.docx

《软件开发技术分享巨型整数相加减.docx》由会员分享,可在线阅读,更多相关《软件开发技术分享巨型整数相加减.docx(17页珍藏版)》请在冰豆网上搜索。

软件开发技术分享巨型整数相加减.docx

软件开发技术分享巨型整数相加减

软件开发技术分享:

巨型整数相加减

这个题目是巨型整数相加减。

巨型整数,即大到最大的数据类型都装不下的整数。

运算的道理其实也简单,就像刚学数学时列竖式来,对位相加,大于9就向高位进位。

具体处理惩罚时,就是将字符串情势默示的巨整数,按位放入一个数组,实现按位相加、进位,及相减、借位。

 

1publicclassComputeHugeNumber

2{

3publicstaticstringPlus(stringnum1,stringnum2)

4{

5if(!

IsNumber(num1,num2))

6return"错误:

操纵数必须是整数。

";

7

8if(num1[0]!

=""-""&&num2[0]!

=""-"")//若是两数都不为负

9returnDoPlus(num1,num2);

10elseif(num1[0]!

=""-""&&num2[0]==""-"")//若是后数为负

11{

12returnDoMinus(num1,num2.Substring

(1));

13}

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(!

IsNumber(num1,num2))

24return"错误:

操纵数必须是整数。

";

25

26if(num1[0]!

=""-""&&num2[0]!

=""-"")

27returnDoMinus(num1,num2);

28elseif(num1[0]!

=""-""&&num2[0]==""-"")

29{

30returnDoPlus(num1,num2.Substring

(1));

31}

32elseif(num2[0]!

=""-""&&num1[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

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

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>num2.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(;i

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

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]>0)//若是高位够借位

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;i>=0;i--,j++)

187{

188result[j]=Convert.ToInt32(str[i].ToString());

189}

190returnresult;

191}

192//向高位借位的递归算法

193privatestaticvoidComputeCarry(int[]numberArray,intp)

194{

195if(numberArray[p]>0)//若是高位够借位

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;i>=0;i--,j++)

210{

211result[j]=Convert.ToInt32(str[i].ToString());

212}

213returnresult;

214}

215//向高位借位的递归算法

216privatestaticvoidComputeCarry(int[]numberArray,intp)

217{

218if(numberArray[p]>0)//若是高位够借位

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;i>=0;i--,j++)

233{

234result[j]=Convert.ToInt32(str[i].ToString());

235}

236returnresult;

237}

238//向高位借位的递归算法

239privatestaticvoidComputeCarry(int[]numberArray,intp)

240{

241if(numberArray[p]>0)//若是高位够借位

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;i>=0;i--,j++)

256{

257result[j]=Convert.ToInt32(str[i].ToString());

258}

259returnresult;

260}

261//向高位借位的递归算法

262privatestaticvoidComputeCarry(int[]numberArray,intp)

263{

264if(numberArray[p]>0)//若是高位够借位

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;i>=0;i--,j++)

279{

280result[j]=Convert.ToInt32(str[i].ToString());

281}

282returnresult;

283}

 

1//将终极策画成果反转回来并拼成字符串

2privatestaticstringReverseIntArrayAndToString(int[]intArray)

3{

4IEnumerabletmp=intArray.Reverse();

5StringBuilderstrBld=newStringBuilder();

6foreach(intiintmp)

7strBld.Append(i);

8returnstrBld.ToString().TrimStart(""0"");

9}

10}

本文由成都网站建设:

成都公司代理:

组织发布。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1