東華oj 高階題第41題 部落人乘法

2021-10-03 11:18:25 字數 1898 閱讀 1591

41 部落人乘法

問題描述 :

明明熱愛數學,他的爸爸也有意培養明明對數學的興趣。

一次,為了拓展明明的知識面,爸爸給明明講了乙個原始部落人計算乘法的方法:

據說原始部落人以小石子作為計算工具,並用減半和加倍兩種運算就能求得任何兩個整數的乘積。

其規則是:

左邊不斷除2,寫下商,捨去餘數;

右邊不斷加倍,直到左邊變成1為止。

取結果的方法是:

如果某行左邊是偶數,就劃去整個這一行;

如果某行左邊是奇數,右邊剩下的數相加即可。

例如求13與15的乘積的過程是:

計算過程:

13--------15 :13除以2等於6,捨去餘數1,15乘以2等於30;

6---------30 :6除以2等於3,30乘以2等於60;

3---------60 :3除以2等於1,捨去餘數1,60乘以2等於120;

1---------120 :左邊數字為1,停止計算。

取結果過程:

13--------15 :左邊是奇數,取15;

6---------30 :左邊是偶數,劃去;

3---------60 :取60;

1---------120 :取120;

其結果就是: 13*15=15+60+120=195。

明明對爸爸講的這個故事相當感興趣,也自己動手開始模擬上面的過程計算起來。剛開始的時候,明明感覺這樣計算很有趣,但是時間一長,明明就覺得這樣的計算過程很麻煩。他想讓你幫他寫乙個程式,快速的計算出上述乘法最後相加的式子和結果。

明明的問題可以歸結為:給你兩個整數,使用上面描述的乘法過程,輸出最後的相加的式子。 輸入說明 :

你的程式需要從標準輸入裝置(通常為鍵盤)中讀入多組測試資料。每組測試資料佔一行,其中包含兩個整數a和b(1 <= a, b <= 100)。

輸出說明 :

對每組測試資料,你的程式需要向標準輸出裝置(通常為啟動該程式的終端)依次輸出一組對應的答案。格式參見樣例。 輸入範例 : 13 15 2

4 輸出範例 : 1315=15+60+120=195 24=8=8

**:

/*

t41 部落人乘法

*/#include

#include

#define max_size 10

intmain()

;// 左邊的數

int right[max_size]=;

// 右邊的數

while

(scanf

("%d%d"

,&a,

&b)!=

eof)

i =0;

while

(left[i++]%

2==0)

;// 定位到左邊第乙個奇數

printf

("%d*%d=%d"

, tempa, tempb, right[i -1]

);// 輸出第乙個加數

sum +

= right[i -1]

;if(i == count -1)

for(

; i < count; i++)}

printf

("=%d\n"

, sum);}

return0;

}

這個不算難,但是細節很多……

像這種處理完第乙個數後面接著處理其他數的時候要注意只有乙個數的特殊情況

東華oj 高階題第11題

11 abc數字 問題描述 明明的爸爸是一位著名的數學家同時也是一位著名的數學啟蒙老師。他經常出一些簡單而有趣的數學題目來給剛剛接觸數學的小朋友做,培養他們對數學的興趣。一天,明明的爸爸想到了這樣乙個題目。如果有a b c三個1位的正整數,那麼按以下的方法構成2個三位數 第一種方法是a為百位,b為十...

東華oj 高階題第21題

21 回文質數 問題描述 因為151既是乙個質數又是乙個回文數 從左到右和從右到左是看一樣的 所以 151 號是回文質數。寫乙個程式來找出範圍 a,b 5 a b 100,000 間的所有回文質數 輸入說明 僅 1 行 二個整數 a 和 b 5 a b 100,000 輸出說明 輸出乙個回文質數的列...

東華oj 高階題第31題

31 最高頻率 問題描述 明明的爸爸是一位著名的數學家。他在明明很小的時候就發現明明有過人的數學天賦,因此有意培養他對數學的興趣。一次,明明的爸爸和明明玩起了乙個數字遊戲,這個遊戲的名字叫 最高頻率 在遊戲中,明明的爸爸要求明明在一串數字中,找出出現次數最多的那個數字,如果有多個數字出現的次數一樣,...