2022年11月3日 星期四

[43] Multiply Strings

字串版的數字相乘...
寫完覺得我不但不會寫扣, 我還不會做乘法吧 (倒地)
char * multiply(char * num1, char * num2){
    if (num1[0]=='0' || num2[0]=='0')
        return "0";
    int len1 = strlen(num1);
    int len2 = strlen(num2);
    int i,j,k=0;
    int maxLen = len1 + len2;
    int *calculate = malloc (sizeof(int)*(maxLen));
    memset(calculate,0,sizeof(int)*(maxLen));
    for (i=0;i<len1;i++)
    {
        for(j=0;j<len2;j++)
        {
            int v1 = (num1[len1-i-1]-'0');
            int v2 = (num2[len2-j-1]-'0');
            calculate[i+j] += v1*v2;
        }
    }
    char *retChar = malloc (sizeof(char)*(maxLen+1));
    retChar[maxLen]='\0';
    for (i=0;i<maxLen-1;i++)
    {
        int scale = calculate[i]%10;
        calculate[i+1] += calculate[i]/10;
        retChar[maxLen-i-1]= scale + '0';
    }
    retChar[maxLen-i-1]= calculate[i] + '0';
    
    for (j=0;j<maxLen;j++)
        if(retChar[j]!='0')
            break;
        
    return retChar+(sizeof(char)*j);
}

奇怪為什麼別人的扣可以那麼精簡, 這就是天才與凡人的差異吧屋屋屋
其實裝數字的array應該要可以倒過來寫才對
並且它似乎可以在一輪的回圈裡就把往上的加加做完而只留下餘數
不過我累了XD 這題先這樣吧...為何medium搞的像hard 一樣呢?!
糟了一個糕啊><

p2. v1 v2 那裡雖然縮成一行比較美麗, 但好像通常比較花時間?!anyway ...

沒有留言:

張貼留言