大整数加减乘除_第1页
大整数加减乘除_第2页
大整数加减乘除_第3页
大整数加减乘除_第4页
大整数加减乘除_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、大整数的加法string BigAdd(string s1,string s2)string c;int carry=0;int len2=s2.size()-1;int len1=s1.size()-1;int max;if(len1len2) max=len1;for(int j=0;jlen1-len2;j+)s2.insert(s2.begin(),0);elsemax=len2;for(int h=0;h=0;i-)carry+=s1i-0;carry+=s2i-0;c.insert(c.begin(),carry%10+0);carry/=10;if(carry0)c.insert

2、(c.begin(),carry%10+0);return c;大整数减法string BigSubtraction(string s1,string s2)string result;bool Flag=false;int carry=0,len1,len2;if(s1=s2) result=0;return result;else if(s1.size()s2.size()swap(s1,s2);len1=s1.size();len2=s2.size();for(int h=0;hlen1-len2;h+)s2.insert(s2.begin(),0);Flag=true;elseif(s

3、1.size()=s2.size() & s1s2) swap(s1,s2);Flag=true;len1=s1.size();len2=s2.size();for(int h=0;h=0;i-)if(carry+(s1i-0)-(s2i-0)0)carry=carry+10+(s1i-0)-(s2i-0);result.insert(result.begin(),carry+0);carry=-1;elsecarry=carry+(s1i-0)-(s2i-0);result.insert(result.begin(),carry+0);carry=0;int f=0;while(result

4、f=0) result.erase(result.begin();f+;if(Flag=true)result.insert(result.begin(),-);return result;大整数乘法string multiplication(string str1,string str2)int maxsize=200;/表示计算结果的长度int a210,b210,c410;/分别为maxsize+10;maxsize+10;maxsize*2+10;int i;for(i=0;imaxsize+10;i+) ai=bi=0; for(i=0;i=0; i-)/把数字倒过来 aj+=str

5、1i-0;for(j=0,i=len2-1; i=0; i-)/倒转第二个整数 bj+=str2i-0;for(i=0; ilen2; i+)/用第二个数乘以第一个数,每次一位 for(j=0; jlen1; j+) ci+j+= bi*aj; /先乘起来,后面统一进位 for(i=0; i=10) ci+1+=ci/10; ci%=10; string Result=;for(i=maxsize*2; (ci=0)&(i=0); i-);/跳过高位的 if(i=0) for(;i=0;i-) Result+=ci+0; else Result=0;return Result;大整数除法求商#

6、define MAX_LEN 200int an1MAX_LEN + 10;int an2MAX_LEN + 10;int aResultMAX_LEN + 10; int Substract( int * p1, int * p2, int nLen1, int nLen2)int i;if( nLen1 = 0; i - ) if( p1i p2i ) break; else if( p1i p2i ) return -1; for( i = 0; i nLen1; i + ) p1i -= p2i; if( p1i = 0 ; i- )if( p1i )return i + 1;retu

7、rn 0;string Division(string s1,string s2)string Result=;int i, j;int nLen1 = s1.size();memset( an1, 0, sizeof(an1);memset( an2, 0, sizeof(an2);memset( aResult, 0, sizeof(aResult);for( j = 0, i = nLen1 - 1;i = 0 ; i -)an1j+ = s1i - 0;int nLen2 =s2.size();for( j = 0, i = nLen2 - 1;i = 0 ; i -)an2j+ =

8、s2i - 0;if( nLen1 0)for( i = nLen1 -1; i = nTimes; i - ) an2i = an2i-nTimes;for( ; i = 0; i-)an2i = 0;nLen2 = nLen1;for( j = 0 ; j = 0) nLen1 = nTmp;aResultnTimes-j+;for( i = MAX_LEN ; (i = 0) & (aResulti = 0); i - );if( i = 0)for( ; i=0; i-)Result+=aResulti+0;elseResult=0;return Result;求N!#include#

9、includeint main() long m,i,j,a10000,n,c; while(scanf(%ld,&n)0) a0=1; m=0; for(i=1;i=n;i+) c=0; for(j=0;j0) m+; am=c; printf(%ld,am); for(i=m-1;i=0;i-) printf(%4.4ld,ai); printf(n); return 0;Floyd(任意两点间的最短距离)#include/别人的测试代码 六度分离#include#includeusing namespace std;#define N 110#define MAX int gNNN,pa

10、thNN;int n,m;void floyd()for(int k=1;k=n;k+)for(int i=1;i=n;i+)for(int j=1;jgk-1ik+gk-1kj)gkij=gk-1ik+gk-1kj;int main()while(scanf(%d%d,&n,&m)!=EOF)int i;for(i=1;i=n;i+)for(int j=1;j=n;j+)if(i=j)g0ij=g0ji=0;elseg0ij=g0ji=MAX;for(i=0;im;i+)int x,y;scanf(%d%d,&x,&y);g0x+1y+1=g0y+1x+1=1;floyd();int fla

11、g=0;for(i=1;i=n;i+)for(int j=i+1;j7)flag=1;break;if(flag=1)printf(Non);elseprintf(Yesn);return 0;迪杰斯卡尔算法#include#include #include#include#include #includeusing namespace std;const int Max=; /设次数为无穷大const int MaxNM=100;/设邻接矩阵的最大长宽int n,line;/n代表景点数,line代表景点间的边数int i,j;struct Viewchar number;string Vi

12、ewName;string Belongs;string AlittleIntro;LovingViewMaxNM;/每个景点的信息,包括“景点名称”,“校区归属”,“间断的介绍”;struct Graphint MyMapMaxNMMaxNM;/邻接矩阵int dijkstra(int strat,int end);int distMaxNM;int VisitMaxNM;int PathMaxNM;void Init(int n);void ShowPath(int start,int end);void Graph:Init(int n)/景点数for(i=1;i=n;i+)/邻接矩阵的

13、初始化disti=Max;for(j=1;j=n;j+)MyMapij=Max;MyMapii=0;int Graph:dijkstra(int start,int end)/老面孔,迪杰斯卡尔算法,老师肯定很熟悉的,邻接矩阵的初始化等操作写在int main()里面了。for(i=1;i=n;i+)/先记入起点到其余各点的距离,并让visit全为(未走过)disti=MyMapstarti;Visiti=0;if(distiMax)Pathi=start;/记入从起点开始可以走的路径;diststart=0;/让走过的记为,同时自己到自己的距离肯定就是啦Visitstart=1;for(i=

14、2;i=n;i+)int temp=Max;int u=start;for(j=1;j=n;j+)/得到最短的边,并取其点if(!Visitj&distjtemp)temp=distj;start=j;Visitstart=1;for(j=1;j=n;j+)/不断更新距离,也就是disit,并记录入路径,等所有循环结束也就OK了if(!Visitj&diststart+MyMapstartj=0;j-)coutchar(MyPathj+64) ;coutchar(END+64)endl;计算天数(未验证)#include#includeusing namespace std;struct monthstring monthname;month13=,Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec;int countdays()int a13;a1=a3=a5=a7=a8=a10=a12=31;a4=a6=a9=a11=30;int years,days;strin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论