﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-不适合写代码</title><link>http://www.cppblog.com/banyc/</link><description>还是得写</description><language>zh-cn</language><lastBuildDate>Tue, 09 Jun 2026 17:41:25 GMT</lastBuildDate><pubDate>Tue, 09 Jun 2026 17:41:25 GMT</pubDate><ttl>60</ttl><item><title>大整数三则运算的学习历程</title><link>http://www.cppblog.com/banyc/archive/2012/06/30/180844.html</link><dc:creator>banyc</dc:creator><author>banyc</author><pubDate>Sat, 30 Jun 2012 01:10:00 GMT</pubDate><guid>http://www.cppblog.com/banyc/archive/2012/06/30/180844.html</guid><wfw:comment>http://www.cppblog.com/banyc/comments/180844.html</wfw:comment><comments>http://www.cppblog.com/banyc/archive/2012/06/30/180844.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/banyc/comments/commentRss/180844.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/banyc/services/trackbacks/180844.html</trackback:ping><description><![CDATA[<span style="font-family: Arial; font-size: 18pt">昨天花了半天的时间研究大整数的加减乘除的运算问题，首先在网上找到了大整数加法的代码，感觉想法还比较容易理解的，依据这个想法在做除法就很容易了，几乎就是把加法的拷贝过来，再改几处就没问题了。然后做乘法，乘法和加法的思路有不同，有思路但是很不清晰，又去网上百度借鉴别人的思路，看懂了，把别人的思路敲进电脑里，编译运行没问题通过了。最后是除法，和乘法又有有很大不同的，看了别人的一些思路，没怎么懂，很多人的代码用C++写的，我对C++的语法不熟悉，目前比较依赖C，所以除法没做出来，就做了个加减乘组合在一起的程序，编译运行都正确，不过要求输入的第一个数要大于第二个数，另外我用的编译器是DEVC++,在别的编译器上是否能运行没有验证过。代码如下：<br /><br /><br />#include &lt;stdio.h&gt;<br />#include &lt;string.h&gt;<br />#define N 210<br />//主函数 <br />int main()<br />{<br />&nbsp;int ADD(char str1[],char str2[]);<br />&nbsp;&nbsp;&nbsp; int MIN(char str1[],char str2[]); <br />&nbsp;&nbsp;&nbsp; int MUL(char str1[],char str2[]);<br />&nbsp;&nbsp;&nbsp; int&nbsp; counter,k; <br />&nbsp;&nbsp;&nbsp; char str1[N],str2[N];<br />&nbsp;&nbsp;&nbsp; printf("Please input the number of the testing group:\n"); <br />&nbsp;&nbsp;&nbsp; scanf("%d",&amp;counter); <br />&nbsp;&nbsp;&nbsp; for(k=0;k&lt;counter;k++)<br />&nbsp;{ <br />&nbsp;&nbsp;printf("Please input two large number:\n"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scanf("%s%s",str1,str2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ADD(str1,str2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MIN(str1,str2); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MUL(str1,str2);<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; system("pause"); <br />} <br />//下谓构造函数加、减、乘 <br />//此为大整数加法运算代码 <br />void ADD(char str1[],char str2[])<br />{<br />&nbsp;int i,j,length1,length2,tag,tag1,n,m;<br />&nbsp;&nbsp;&nbsp; int num1[N],num2[N];<br />&nbsp;&nbsp;&nbsp; length1=strlen(str1);<br />&nbsp;&nbsp;&nbsp; length2=strlen(str2);<br />&nbsp;&nbsp;&nbsp; for(i=0;i&lt;210;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; num1[i]=0;<br />&nbsp;&nbsp;&nbsp; for(i=0;i&lt;210;i++)<br />&nbsp;&nbsp;&nbsp; num2[i]=0;<br />&nbsp;&nbsp;&nbsp; j=0;<br />&nbsp;&nbsp;&nbsp; for(i=length1-1;i&gt;=0;i--)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;num1[j]=str1[i]-'0';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j++;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;j=0;<br />&nbsp;&nbsp;&nbsp; for(i=length2-1;i&gt;=0;i--)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;num2[j]=str2[i]-'0';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j++;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; for(i=0;i&lt;200;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;num1[i]+=num2[i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(num1[i]&gt;=10)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;num1[i]-=10;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; num1[i+1]++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; for(i=209;i&gt;=0;i--)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;if(num1[i]!=0||num2[i]!=0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />&nbsp;&nbsp;&nbsp;tag=i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; printf("The result of add is:\n"); <br />&nbsp;&nbsp;&nbsp; for(i=tag;i&gt;=0;i--)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;printf("%d",num1[i]);<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; printf("\n");<br />&nbsp;&nbsp;&nbsp; return 0;<br />}<br />//此为大整数减法的代码 <br />void MIN (char str1[],char str2[])<br />{<br />&nbsp;int n,m,length11,length22,tag1;<br />&nbsp;int num3[N],num4[N]; <br />&nbsp;&nbsp;&nbsp; length11=strlen(str1);<br />&nbsp;&nbsp;&nbsp; length22=strlen(str2);<br />&nbsp;&nbsp;&nbsp; for(n=0;n&lt;210;n++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; num3[n]=0;<br />&nbsp;&nbsp;&nbsp; for(n=0;n&lt;210;n++)<br />&nbsp;&nbsp;&nbsp; num4[n]=0;<br />&nbsp;&nbsp;&nbsp; m=0;<br />&nbsp;for(n=length11-1;n&gt;=0;n--)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;num3[m]=str1[n]-'0';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m++;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; m=0;<br />&nbsp;&nbsp;&nbsp; for(n=length22-1;n&gt;=0;n--)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;num4[m]=str2[n]-'0';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m++;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; for(n=0;n&lt;200;n++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;num3[n]-=num4[n];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(num3[n]&lt;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;num3[n]+=10;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; num3[n+1]--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; for(n=209;n&gt;=0;n--)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp; {<br />&nbsp;&nbsp;if(num3[n]!=0||num4[n]!=0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;tag1=n;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; }<br />&nbsp;&nbsp; printf("The result of plus is \n"); <br />&nbsp;&nbsp; for(n=tag1;n&gt;=0;n--)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp; {<br />&nbsp;&nbsp;printf("%d",num3[n]);<br />&nbsp;&nbsp; }<br />&nbsp;&nbsp; printf("\n");<br />&nbsp;&nbsp; return 0;<br />} <br />//此为大整数乘法的代码 <br />void MUL(char str1[],char str2[])<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp; int p,q,length3,length4,tag2;<br />&nbsp;&nbsp;&nbsp;&nbsp; int num5[N],num6[N],num7[N];<br />&nbsp;&nbsp;&nbsp;&nbsp; length3=strlen(str1);<br />&nbsp;&nbsp;&nbsp;&nbsp; length4=strlen(str2);<br />&nbsp;&nbsp;&nbsp;&nbsp; for(p=0;p&lt;N;p++)<br />&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;num5[p]=0;<br />&nbsp;&nbsp;&nbsp;num6[p]=0;<br />&nbsp;&nbsp;&nbsp;num7[p]=0;<br />&nbsp; }<br />&nbsp; q=0;<br />&nbsp;for(p=length3-1;p&gt;=0;p--) <br />&nbsp;{<br />&nbsp;&nbsp;num5[q]=str1[p]-'0';<br />&nbsp;&nbsp;q++;<br />&nbsp;}<br />&nbsp;q=0;<br />&nbsp;for(p=length4-1;p&gt;=0;p--)<br />&nbsp;{<br />&nbsp;&nbsp;num6[q]=str2[p]-'0';<br />&nbsp;&nbsp;q++;<br />&nbsp;} <br />&nbsp;for(q=0;q&lt;length4;q++)<br />&nbsp;for(p=0;p&lt;length3;p++)<br />&nbsp;{<br />&nbsp;&nbsp;num7[p+q]+=num5[p]*num6[q];<br />&nbsp;&nbsp;while(num7[p+q]&gt;=10)<br />&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;num7[q+p]-=10;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; num7[q+p+1]++;<br />&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;}<br />&nbsp;for(p=N-1;p&gt;=0;p--)<br />&nbsp;{<br />&nbsp;&nbsp;if(num7[p]!=0)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;tag2=p;<br />&nbsp;&nbsp;&nbsp;break; <br />&nbsp;&nbsp;}<br />&nbsp;}<br />&nbsp;printf("The result of mul is: \n"); <br />&nbsp;for(p=tag2;p&gt;=0;p--)<br />&nbsp;{<br />&nbsp;&nbsp;printf("%d",num7[p]); <br />&nbsp;} <br />&nbsp;printf("\n\n"); <br />&nbsp;return 0;<br />}<br /></span><img src ="http://www.cppblog.com/banyc/aggbug/180844.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/banyc/" target="_blank">banyc</a> 2012-06-30 09:10 <a href="http://www.cppblog.com/banyc/archive/2012/06/30/180844.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>