CCF 訓練50題 NO 22 A除以B

2021-08-10 21:54:05 字數 757 閱讀 1562

本題要求計算a/b,其中a是不超過1000位的正整數,b是1位正整數。你需要輸出商數q和餘數r,使得a = b * q + r成立。

這個問題關鍵點在於不超過1000位的整數和乙個一位數,這個不超過一千位的整數應當是以字串的形式錄入,然後模擬小學學的豎式除法。模擬豎式計算做到右依次,直到最後一位那裡即可得出結果。

關鍵點就在於從被除數的第一位一直迴圈到最後一位。其中細節是第一位其除以除數之後保留餘數,之後每一位的值都是前一位的餘數乘以10+原來的數。這樣一來就可以一直到最後了。核心部分就是

if (i==0) c=a[i]-『0』;else c=(a[i-1]-『0』)*10+(a[i]-『0』);

這裡是控制了每次的被除數,通過這一步就可以直接獲得商的每一位了。

if (i!=0||q[i]!=』0』) cout<

#include 

using

namespace

std;

int main()

(五)最後一位就是最後的餘數

char r=a[la-1];

cout

<<" "

《這題的要點在於聯想到豎式除法。由此可見,平時的計算思維是可以從**中體現出來的,同時第一次做這題的時候我是將前一位餘數是0和第一位列出為第二種情況的,但是經過後來的思考發現是沒有這個必要的,只需要對第乙個數的小被除數單獨列出來就可以,這樣避免了兩種80%相同的計算,大大簡潔了**。這個告訴我不要滿足於第一次成功過的**,要學會反覆雕琢,簡化簡易**。

CCF 訓練50題 NO 23 錘子剪刀布

大家應該都會玩 錘子剪刀布 的遊戲。現給出兩人的交鋒記錄,請統計雙方的勝 平 負次數,並且給出雙方分別出什麼手勢的勝算最大。輸入第1行給出正整數n 105 即雙方交鋒的次數。隨後n行,每行給出一次交鋒的資訊,即甲 乙雙方同時給出的的手勢。c代表 錘子 j代表 剪刀 b代表 布 第1個字母代表甲方,第...

CCF 訓練50題 NO 12 多項式加法

乙個多項式可以表示為一組數對,數對中第乙個數始終為整數,且唯一,表示多項式的次數,另一數表示為對應的係數且不為0。輸入兩組數對,每組以0 0作為結束,實現對兩個多項式的加法並按降冪輸出結果數對 每乙個數對可以視為乙個結構體,每個結構體由兩個變數決定,相加的時候由數對的第乙個元素決定,相同的時候相加,...

CCF 訓練50題 NO 21 部分A B

正整數a的 da 為1位整數 部分 定義為由a中所有da組成的新整數pa。例如 給定a 3862767,da 6,則a的 6部分 pa是66,因為a中有2個6 給定a 3862767,da 1,則a的 1部分 pa是0,因為a中有0個1。現給定a da b db,請編寫程式計算pa pb。輸入在一行...