zoukankan      html  css  js  c++  java
  • 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]='';
    }

    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]!='')
              {
                   str[index++]=str[i];
                   for(j=i+1;j<len;++j)
                   {
                        if(str[j]==str[i])
                        str[j]='';
                   }
              }
         }
         str[index]='';
    }

    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]='';
    }
  • 相关阅读:
    118. Pascal's Triangle
    172. Factorial Trailing Zeroes
    345. Reverse Vowels of a String
    58. Length of Last Word
    383. Ransom Note
    387. First Unique Character in a String
    83. Remove Duplicates from Sorted List
    关于Assembly.CreateInstance()与Activator.CreateInstance()方法
    查看占用指定端口的进程
    如何使用eclipse打开已有工程
  • 原文地址:https://www.cnblogs.com/LeoGodfrey/p/3657577.html
Copyright © 2011-2022 走看看