减半加倍求乘法

减半加倍求乘法

作者: XXX 时间限制: 10S 章节: 一维数组

问题描述 :

用减半和加倍两种运算就能求得任何两个整数的乘积。

其规则是:

左边不断除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

#include<stdio.h>
int main(){
    int a,b;
	int aa[100],bb[100];
	while(scanf("%d %d",&a,&b)!=EOF){
		aa[0]=a;
		bb[0]=b;
		int i=0,j=0;
		while(aa[i]>1){
			aa[i+1]=aa[i]/2;//存储左边减半的数
			bb[j+1]=bb[j]*2;//存储右边加倍的数
			i++;j++;
		}
		int k,m,n;
		int sum=0;
		int l=0,cc[100];
		for(k=0;k<=i;k++){
			if(aa[k]%2==1){//如果左边的数为奇数,则将右边的数累加
				sum=sum+bb[k];
				cc[l]=bb[k];//用数组c存储满足条件的右边的数
				l++;
			}
		}
		printf("%d*%d=",a,b);
		for(m=0;m<l-1;m++){
			printf("%d+",cc[m]);
		}
		printf("%d=",cc[m]);
		printf("%d\n",sum);
	}
	//int k;
//	for(k=0;k<=i;k++){
//	    printf("%d ",bb[k]);
//	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值