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
2
4=8=8

c源碼:

#include<stdio.h>
int main()
{
	int n,m,a[2][100]={0},i=0,j=0,s,t;
 
   while(scanf("%d%d",&n,&m)!=EOF)
   {
     a[0][0]=n;
	 a[1][0]=m;
	
	 t=1;
	 while(n!=1)
	 {
	   n=n/2;
	   m=m*2;
	   a[0][t]=n;
       a[1][t]=m;
	   	   t++;
	 }
	 s=0;
     for(i=0;i<t;i++)
        if(a[0][i]%2==1)
			s=s+a[1][i];
		
	 printf("%d*%d=",a[0][0],a[1][0]);
	for(i=0;i<t-1;i++)
        if(a[0][i]%2==1)
			printf("%d+",a[1][i]);
		if(a[0][t-1]%2==1)
		printf("%d=%d\n",a[1][t-1],s);

	   
   }
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章