temporary
private void OnAttendeeConnected(object pObjAttendee) { IRDPSRAPIAttendee pAttendee = pObjAttendee as IRDPSRAPIAttendee; pAttendee.ControlLevel = CTRL_LEVEL.CTRL_LEVEL_VIEW; LogTextBox.Text += ("Attendee Connected: " + pAttendee.RemoteName + Environment.NewLine); }
HRESULT CoCreateInstance (
REFCLSID rclsid,
LPUNKNOWN pUnkOuter,
DWORD dwClsContext,
REFIID riid,
LPVOID* ppv );
// 大数的四则运算及求模。数字无位数限制,除法的商支持小数。 #include <iostream> #include <string> #include <time.h> using namespace std; class BIGINTEGEROPERATIONS { private: static int COMPARE(string number1, string number2) { int j; int length1 = number1.size(); int length2 = number2.size(); if (number1.size() == 0) number1 = "0"; if (number2.size() == 0) number2 = "0"; j = 0; for (int i = 0; i < length1; ++i) { if (number1[i] == '0') ++j; else break; } number1 = number1.substr(j); j = 0; for (int i = 0; i < length2; ++i) { if (number2[i] == '0') ++j; else break; } number2 = number2.substr(j); length1 = number1.size(); length2 = number2.size(); if (length1 > length2) { return 1; } else if (length1 == length2) { if (number1.compare(number2) > 0) { return 1; } else if (number1.compare(number2) == 0) { return 0; } else { return -1; } } else { return -1; } return 0; } public: static string PLUS(string number1, string number2) { int i; int length1 = number1.size(); int length2 = number2.size(); string result = ""; reverse(number1.begin(), number1.end()); reverse(number2.begin(), number2.end()); for (i = 0; i < length1 && i < length2; i++) { char c = (char)(number1[i] + number2[i] - 48); result = result + c; } while (i < length1) { result = result + number1[i]; ++i; } while (i < length2) { result = result + number2[i]; ++i; } int carry = 0; for (i = 0; i < (int)result.size(); ++i) { int value = result[i] - 48 + carry; result[i] = (char)(value % 10 + 48); carry = value / 10; } if (carry != 0) { result = result + (char)(carry + 48); } for (i = result.size() - 1; i >= 0; i--) { if (result[i] != '0') break; } result = result.substr(0, i + 1); reverse(result.begin(), result.end()); if (result.length() == 0) result = "0"; return result; } static string MINUS(string number1, string number2) { int i; string result = ""; int length1 = number1.size(); int length2 = number2.size(); if (COMPARE(number2, number1) > 0) { return "-" + MINUS(number2, number1); } reverse(number1.begin(), number1.end()); reverse(number2.begin(), number2.end()); for (i = 0; i < length1 && i < length2; i++) { char c = number1[i] - number2[i] + 48; result = result + c; } if (i < length1) { for (; i < length1; i++) { result = result + number1[i]; } } int carry = 0; for (i = 0; i < (int)result.length(); i++) { int value = result[i] - 48 + carry; if (value < 0) { value = value + 10; carry = -1; } else carry = 0; result[i] = (char)(value + 48); } for (i = result.size() - 1; i >= 0; i--) { if (result[i] != '0')break; } result = result.substr(0, i + 1); reverse(result.begin(), result.end()); if (result.length() == 0) result = "0"; return result; } static string MULTIPLY(string number1, string number2) { int i, j; int *iresult; int length1 = number1.size(); int length2 = number2.size(); string result = ""; reverse(number1.begin(), number1.end()); reverse(number2.begin(), number2.end()); iresult = (int*)malloc(sizeof(int) * (length1 + length2 + 1)); memset(iresult, 0, sizeof(int) * (length1 + length2 + 1)); for (i = 0; i < length1; i++) { for (j = 0; j < length2; j++) { iresult[i + j] += ((number1[i] - 48) * (number2[j] - 48)); } } int carry = 0; for (i = 0; i < length1 + length2; i++) { int value = iresult[i] + carry; iresult[i] = value % 10; carry = value / 10; } for (i = length1 + length2 - 1; i >= 0; i--) { if (iresult[i] != 0)break; } for (; i >= 0; i--) { result = result + (char)(iresult[i] + 48); } free(iresult); if (result == "") result = "0"; return result; } // 缺省地,商数向下取整,floatpoint用于指定保留小数点的位数 static string DIVIDE(string number1, string number2, int floatpoint = 0) { int i, j, pos; string result = ""; string tempstr = ""; int length1 = number1.size(); int length2 = number2.size(); if ((COMPARE(number2, number1) > 0) && (floatpoint == 0)) { return "0"; } tempstr = number1.substr(0, length2); pos = length2 - 1; while (pos < length1) { int quotient = 0; while (COMPARE(tempstr, number2) >= 0) { quotient++; tempstr = MINUS(tempstr, number2); } result = result + (char)(quotient + 48); pos++; if (pos < length1) { tempstr += number1[pos]; } } if (floatpoint > 0) { result += '.'; string stmp = "1"; int itmp = 0; for (int k = 0; k < floatpoint; ++k) { stmp += '0'; if (COMPARE(MULTIPLY(MINUS(number1, MULTIPLY(DIVIDE(number1, number2), number2)), stmp), number2) < 0) { result += '0'; ++itmp; } } string temp = DIVIDE(MULTIPLY(MINUS(number1, MULTIPLY(DIVIDE(number1, number2), number2)), stmp), number2); if (temp[0] != '0') result += temp; } j = result.size(); for (i = 0; i < j; i++) { if (result[i] != '0') break; } result = result.substr(i, j); return result; } static string MOD(string number1, string number2) { if (COMPARE(number2, number1) > 0) { return number1; } else if (COMPARE(number2, number1) == 0) { return "0"; } else { return MINUS(number1, MULTIPLY(DIVIDE(number1, number2), number2)); } } }; int main(int argc, char* argv[]) { clock_t start, end; // 两个操作数均为600位 string number1 = "99999999999999999999999999999999999999999999999999" "99999999999999999999999999999999999999999999999999" "99999999999999999999999999999999999999999999999999" "99999999999999999999999999999999999999999999999999" "99999999999999999999999999999999999999999999999999" "99999999999999999999999999999999999999999999999999" "99999999999999999999999999999999999999999999999999" "99999999999999999999999999999999999999999999999999" "99999999999999999999999999999999999999999999999999" "99999999999999999999999999999999999999999999999999" "99999999999999999999999999999999999999999999999999" "99999999999999999999999999999999999999999999999999"; string number2 = "99989998999899989998999899989998999899989998999899" "98999899989998999899989998999899989998999899989998" "99989998999899989998999899989998999899989998999899" "98999899989998999899989998999899989998999899989998" "99989998999899989998999899989998999899989998999899" "98999899989998999899989998999899989998999899989998" "99989998999899989998999899989998999899989998999899" "98999899989998999899989998999899989998999899989998" "99989998999899989998999899989998999899989998999899" "98999899989998999899989998999899989998999899989998" "99989998999899989998999899989998999899989998999899" "98999899989998999899989998999899989998999899989998"; string result; int interval = 0; start = clock(); result = BIGINTEGEROPERATIONS::PLUS(number1, number2); end = clock(); interval = (end - start) * 1000 / CLOCKS_PER_SEC; cout << "Result of PLUS operation:" << endl; cout << result << endl; cout << "It took " << interval << "ms" << endl; cout << endl; start = clock(); result = BIGINTEGEROPERATIONS::MINUS(number1, number2); end = clock(); interval = (end - start) * 1000 / CLOCKS_PER_SEC; cout << "Result of MINUS operation:" << endl; cout << result << endl; cout << "It took " << interval << "ms" << endl; cout << endl; start = clock(); result = BIGINTEGEROPERATIONS::MULTIPLY(number1, number2); end = clock(); interval = (end - start) * 1000 / CLOCKS_PER_SEC; cout << "Result of MULTIPLY operation:" << endl; cout << result << endl; cout << "It took " << interval << "ms" << endl; cout << endl; start = clock(); result = BIGINTEGEROPERATIONS::DIVIDE(number1, number2); end = clock(); interval = (end - start) * 1000 / CLOCKS_PER_SEC; cout << "Result of DIVIDE operation:" << endl; cout << result << endl; cout << "It took " << interval << "ms" << endl; cout << endl; start = clock(); result = BIGINTEGEROPERATIONS::MOD(number1, number2); end = clock(); interval = (end - start) * 1000 / CLOCKS_PER_SEC; cout << "Result of MOD operation:" << endl; cout << result << endl; cout << "It took " << interval << "ms" << endl; cout << endl; return 0; } /* 计算结果如下(Release 模式): Result of PLUS operation: 1999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989997 It took 0ms Result of MINUS operation: 100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 It took 0ms Result of MULTIPLY operation: 999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989997000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010002 It took 15ms Result of DIVIDE operation: 1.0001 It took 0ms Result of MOD operation: 100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 It took 0ms Debug模式下,加、减、乘、除以及取模的执行时间分别为: 0ms 0ms 63ms 78ms 0ms */
void remove_duplicate(char* str) { if(str==NULL) return; int len=strlen(str); if(len<2) return; int i,j,k; for(i=0;i<len;++i) { for(j=i+1;j<len;++j) if(str[i]==str[j]) { for(k=j+1;k<len;++k) { str[k-1]=str[k]; len--; } } } str[len-1]='\0'; }
void remove_duplicate(char* str) { if(str==NULL) return; int len=strlen(str); if(len<2) return; int i,j; int index=0; for(i=0;i<len;++i) { if(str[i]!='\0') { str[index++]=str[i]; for(j=i+1;j<len;++j) { if(str[j]==str[i]) str[j]='\0'; } } } str[index]='\0'; }
void remove_duplicate(char* str) { if(str==NULL) return; int len=strlen(str); if(len<2) return; char flags[256]; int i,j; int index=1; memset(flags,0,sizeof(flags)); flags[str[0]]=1; for(i=1;i<len;++i) { if(flags[str[i]]!=1) { str[index++]=str[i]; flags[str[i]]=1; } } str[index]='\0'; }