//清华2006:题目1076:N的阶乘 //输出N的阶乘(0<=N<=1000) 即大数乘法 #include <fstream> #include <iostream> #include <memory.h> using namespace std; int a[100000]; int length; //a数组的实际占用长度 void mul(int *a, int b ){ // b 为乘数 int i, tmp, carry=0; for( i=0; i<length; i++ ){ tmp = a[i] * b + carry; a[i] = tmp % 10000; //每个数组max=9999 运算中实际max=9999000 carry=999 carry = tmp / 10000; } if( carry!=0 ){ a[length] = carry; length++; } } int main(){ int i, j, k, n; //ifstream cin("THU_1076.txt"); while( cin >> n ){ memset(a,0,sizeof(a)); a[0] = 1; length = 1; for( i=2; i<=n; i++ ){ mul( a, i ); //逐级输出 调试用 //for( j=length-1; j>=0; j-- ){ // if( j!=length-1 ){ // if( a[j]<10 ) // cout << "000"; // else if( a[j]<100 ) // cout << "00"; // else if( a[j]<1000 ) // cout << "0"; // } // cout << a[j]; //} //cout << endl; } //ofstream out("THU_1076_output.txt"); for( j=length-1; j>=0; j-- ){ if( j!=length-1 ){ if( a[j]<10 ) cout << "000"; else if( a[j]<100 ) cout << "00"; else if( a[j]<1000 ) cout << "0"; }// if cout << a[j]; }// for cout << endl; } return 0; }
各种情况都要考虑到啊 包括单个输入数据可能是大数 超出int范围
//清华2006:题目1077:最大序列和 //求给定序列的最大非空连续子序列和 //N为正整数,N≤1000000,结果序列和在范围(-2^63,2^63-1)以内。 #include <fstream> #include <iostream> #define INT long long using namespace std; int main(){ int i, n; INT temp, sum, b; ifstream cin("THU_1077.txt"); while( cin >> n ){ for( i=0; i<n; i++ ){ cin >> b; if( i == 0 ){ sum = b; temp = 0; } if( temp > 0 ) temp += b; else temp = b; if( temp > sum ) sum = temp; }// for cout << sum << endl; } system("pause"); return 0; }
//清华2006:题目1078:二叉树遍历 //两个字符串,其长度n均小于等于26。 第一行为前序遍历,第二行为中序遍历。 //二叉树中的结点名称以大写字母表示:A,B,C....最多26个结点。 //输出后序遍历的字符串。 #include <fstream> #include <string> #include <iostream> using namespace std; struct BiTree{ char a; BiTree* l; BiTree* r; }; BiTree* process( string S, string T ){ if( S.empty() ) return NULL; int mark = T.find(S[0]); //t[S[0]-64]; BiTree *b = new BiTree(); //b=binary tree b->a = S[0]; b->l = process( S.substr(1,mark), T.substr(0,mark) ); b->r = process( S.substr(mark+1,S.size()-mark-1), T.substr(mark+1,T.size()-mark-1) ); return b; }; void postTraverse( BiTree* b ){ if( b != NULL ){ if( b->l != NULL) postTraverse(b->l); if( b->r != NULL) postTraverse(b->r); cout << b->a; } }; int main(){ int i, n; string S, T; //preorder inorder postorder ifstream cin("THU_1078.txt"); while( cin >> S >> T ){ BiTree *B = process( S, T ); postTraverse( B ); cout << endl; } system("pause"); return 0; }