九度 題目1003 A B

2021-07-10 20:25:41 字數 1799 閱讀 2033

題目描述:

給定兩個整數a和b,其表示形式是:從個位開始,每三位數用逗號」,」隔開。

現在請計算a+b的結果,並以正常形式輸出。

輸入:

輸入包含多組資料資料,每組資料佔一行,由兩個整數a和b組成(-10^9 < a,b < 10^9)。

輸出:

請計算a+b的結果,並以正常形式輸出,每組資料佔一行。

該題與2023年3月28日阿里內推筆試第一題很相似, 區別在於阿里那道題要求處理大數, 而且數字之間沒有」,」. 下面的分析與解法將考慮存在大數的情況.

因為輸入字串中存在逗號, 因此先對兩個字串進行預處理. 分配新的陣列, 在對原指標陣列遍歷的過程中將逗號去除, 複製到新的陣列.

如果兩個數字符號相同, 則進行加法, 所得結果符號與任一加數符號相同; 如果兩個數字符號相反, 則進行減法, 所得結果符號與絕對值較大的加數符號相同.

1). 對於第一種情況, 從兩數字最低位 (字串最後一位) 開始相加, 依次向前, 注意對進製的處理. 處理完公共長度後, 需要對某一較長的數字的剩餘部分進行處理.

2). 對於第二種情況, 讓指標pa指向絕對值較大的數,pb指向絕對值較小的數, 注意字串長度要與之保持對應. 然後對兩者的絕對值進行相減, 所得結果非負, 最終符號由絕對值較大的數字決定.

對於結果陣列中的前導0需要跳過.

#include 

#include

#include

#include

#define max_len 3000

void do_calc(char *a, char *b)

int i = lena - 1;

int j = lenb - 1;

while (i >= 0 && j >= 0)

// if either operand has some digits left

while (i >= 0)

while (j >= 0)

if (carry > 0)

} else else

int i = lena-1;

int j = lenb-1;

while (i >=0 && j>=0)

if (tmp < 0) else

result[k++] = tmp % 10 + '0';

}// pa points the larger number, so only one while

while (i >= 0)

if (tmp < 0) else

result[k++] = tmp % 10 + '0';}}

// k points to one element past the last element, so we go back

k--;

while (k > 0 && result[k] == '0')

k--; // skip leading zeros

if (k == 0 && result[k] == '0')

if (neg)

while (k >= 0)

printf("\n");

}void add_number(char *a, char *b)

pa++;

}*pa2 = '\0';

while (*pb)

pb++;

}*pb2 = '\0';

do_calc(a2, b2);

}int main()

}

九度題目1003 A B

題目1003 a b 題目描述 給定兩個整數a和b,其表示形式是 從個位開始,每三位數用逗號 隔開。現在請計算a b的結果,並以正常形式輸出。輸入 輸入包含多組資料資料,每組資料佔一行,由兩個整數a和b組成 10 9 a,b 10 9 輸出 請計算a b的結果,並以正常形式輸出,每組資料佔一行。樣例...

題目1003 A B 字串轉數字

每次給你兩個數,數的形式是每三位有乙個間隔符 計算兩數之和。兩個問題,一 如何讀入?我們可以先用字串讀入,再作處理。第 二 如何處理?我們可以對字串逐一處理,轉化成數字,把間隔符忽略就可以了。坑點 負數問題,開頭注意判斷是否是負數,可以用bool儲存下來最後處理。created by alvinzh...

九度題目1015 還是A B

題目描述 讀入兩個小於10000的正整數a和b,計算a b。需要注意的是 如果a和b的末尾k 不超過8 位數字相同,請直接輸出 1。輸入 測試輸入包含若干測試用例,每個測試用例佔一行,格式為 a b k 相鄰兩數字有乙個空格間隔。當a和b同時為0時輸入結束,相應的結果不要輸出。輸出 對每個測試用例輸...