大整数的加法string BigAdd(string s1,string s2){string c;int carry=0;int len2=s2.size()-1;int len1=s1.size()-1;int max;if(len1>len2){max=len1;for(int j=0;j<len1-len2;j++)s2.insert(s2.begin(),'0');}else{max=len2;for(int h=0;h<len2-len1;h++)s1.insert(s1.begin(),'0');}for(int i=s1.size()-1;i>=0;i--){carry+=s1[i]-'0';carry+=s2[i]-'0';c.insert(c.begin(),carry%10+'0');carry/=10;}if(carry>0)c.insert(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;h<len1-len2;h++)s2.insert(s2.begin(),'0');Flag=true;}else{if(s1.size()==s2.size() && s1<s2){ swap(s1,s2); Flag=true;}len1=s1.size();len2=s2.size();for(int h=0;h<len1-len2;h++)s2.insert(s2.begin(),'0');}for(int i=s1.size()-1;i>=0;i--){if(carry+(s1[i]-'0')-(s2[i]-'0')<0){carry=carry+10+(s1[i]-'0')-(s2[i]-'0');result.insert(result.begin(),carry+'0');carry=-1;}else{carry=carry+(s1[i]-'0')-(s2[i]-'0');result.insert(result.begin(),carry+'0');carry=0;}}int f=0;while(result[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 a[210],b[210],c[410];//分别为maxsize+10;maxsize+10;maxsize*2+10;int i;for(i=0;i<maxsize+10;i++) a[i]=b[i]=0;for(i=0;i<maxsize*2+10;i++) c[i]=0;int len1,len2;len1=str1.size();len2=str2.size();int j;for(j=0,i=len1-1; i>=0; i--)//把数字倒过来a[j++]=str1[i]-'0';for(j=0,i=len2-1; i>=0; i--)//倒转第二个整数b[j++]=str2[i]-'0';for(i=0; i<len2; i++)//用第二个数乘以第一个数,每次一位{for(j=0; j<len1; j++)c[i+j]+= b[i]*a[j]; //先乘起来,后面统一进位}for(i=0; i<maxsize*2; i++)//循环统一处理进位问题{if(c[i]>=10){c[i+1]+=c[i]/10;c[i]%=10;}}string Result="";for(i=maxsize*2; (c[i]==0)&&(i>=0); i--);//跳过高位的if(i>=0)for(;i>=0;i--)Result+=c[i]+'0';elseResult="0";return Result;}大整数除法求商#define MAX_LEN 200int an1[MAX_LEN + 10];int an2[MAX_LEN + 10];int aResult[MAX_LEN + 10]; int Substract( int * p1, int * p2, int nLen1, int nLen2) {int i;if( nLen1 < nLen2 )return -1;if( nLen1 == nLen2 ){for( i = nLen1-1; i >= 0; i -- ){if( p1[i] > p2[i] ) break;else if( p1[i] < p2[i] ) return -1;}}for( i = 0; i < nLen1; i ++ ){p1[i] -= p2[i];if( p1[i] < 0 ){p1[i]+=10;p1[i+1] --;}}for( i = nLen1 -1 ; i >= 0 ; i-- )if( p1[i] )return i + 1;return 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 --)an1[j++] = s1[i] - '0';int nLen2 =s2.size();for( j = 0, i = nLen2 - 1;i >= 0 ; i --)an2[j++] = s2[i] - '0';if( nLen1 < nLen2 ){Result="0";return Result;}int nTimes = nLen1 - nLen2;if(nTimes > 0){for( i = nLen1 -1; i >= nTimes; i -- )an2[i] = an2[i-nTimes];for( ; i >= 0; i--)an2[i] = 0;nLen2 = nLen1;}for( j = 0 ; j <= nTimes; j ++ ){int nTmp;while( (nTmp = Substract(an1, an2+j, nLen1, nLen2-j)) >= 0){nLen1 = nTmp;aResult[nTimes-j]++;}}for( i = MAX_LEN ; (i >= 0) && (aResult[i] == 0); i -- );if( i >= 0)for( ; i>=0; i--)Result+=aResult[i]+'0';elseResult="0";return Result;}求N!#include<stdio.h>#include<math.h>int main(){long m,i,j,a[10000],n,c;while(scanf("%ld",&n)>0){a[0]=1;m=0;for(i=1;i<=n;i++){c=0;for(j=0;j<=m;j++){a[j]=a[j]*i+c;c=a[j]/10000;a[j]%=10000;}if(c>0){m++;a[m]=c;}}printf("%ld",a[m]);for(i=m-1;i>=0;i--)printf("%4.4ld",a[i]);printf("\n");}return 0;}Floyd(任意两点间的最短距离) #include<stdio.h>//别人的测试代码六度分离#include<string.h>#include<iostream>using namespace std;#define N 110#define MAX 999999999int g[N][N][N],path[N][N];int n,m;void floyd(){for(int k=1;k<=n;k++)for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){g[k][i][j]=g[k-1][i][j];if(g[k][i][j]>g[k-1][i][k]+g[k-1][k][j]){g[k][i][j]=g[k-1][i][k]+g[k-1][k][j];}}}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)g[0][i][j]=g[0][j][i]=0;elseg[0][i][j]=g[0][j][i]=MAX;}}for(i=0;i<m;i++){int x,y;scanf("%d%d",&x,&y);g[0][x+1][y+1]=g[0][y+1][x+1]=1;}floyd();int flag=0;for(i=1;i<=n;i++)for(int j=i+1;j<=n;j++)if(g[n][i][j]>7){flag=1;break;}if(flag==1)printf("No\n");elseprintf("Yes\n");}return 0;}迪杰斯卡尔算法#include<iostream>#include<stdio.h>#include<conio.h>#include<iomanip>#include<windows.h>#include<string>using namespace std;const int Max=9999999; //设次数为无穷大const int MaxNM=100;//设邻接矩阵的最大长宽int n,line;//n代表景点数,line代表景点间的边数int i,j;struct View{char number;string ViewName;string Belongs;string AlittleIntro;}LovingView[MaxNM];//每个景点的信息,包括“景点名称”,“校区归属”,“间断的介绍”;struct Graph{int MyMap[MaxNM][MaxNM];//邻接矩阵int dijkstra(int strat,int end);int dist[MaxNM];int Visit[MaxNM];int Path[MaxNM];void Init(int n);void ShowPath(int start,int end);};void Graph::Init(int n)//景点数{for(i=1;i<=n;i++){ //邻接矩阵的初始化dist[i]=Max;for(j=1;j<=n;j++){MyMap[i][j]=Max;}MyMap[i][i]=0;}}int Graph::dijkstra(int start,int end){//老面孔,迪杰斯卡尔算法,老师肯定很熟悉的,邻接矩阵的初始化等操作写在int main()里面了。