233 高精度乘法

链接:https://www.nowcoder.com/acm/contest/118/E
来源:牛客网

题目描述


Kirai聊天的时候非常喜欢发“233”,“233”来源于猫扑表情第233号,是一张捶地大笑的表情。
Kirai每当看到很好玩的消息的时候总会回一串“2333...”。
Kirai其实十分高冷,他发现了这个问题。为了不希望别人立刻知道他在笑,他决定将两个“233..”乘在一起发出去。

输入描述:

输入样例有多组,全部是正整数。首先输入样例组数T(T≤1500)。
接下来输入T组数,每组数字由两个233串组成,每个233串长度3≤n≤50。
数据保证每个233串必然会有一个2作为开头,并且3的数量≥2。

输出描述:

两个233串的乘积。

示例1

输入

2
233 233
23333333333333333333333333333333333333333333333333 23333333333333333333333333333333333333333333333333

输出

54289
544444444444444444444444444444444444444444444444428888888888888888888888888888888888888888888888889

#include<stdio.h>
#include<string.h>
#include<math.h>

void reverse(char a[],int b[])
{
	int l=strlen(a);
	for(int i=0;i<l;i++)
		b[l-1-i]=a[i]-'0';
	
}
int main()
{
	//freopen("D:\\插件\\Dev-Cpp\\新建文件夹\\test.txt","r",stdin);
	int n,i,j;
	char a[51],b[51];
	int c[51],d[51];
	scanf("%d",&n);
	getchar();
	while(n--){
		scanf("%s%s",a,b);
		reverse(a,c);reverse(b,d);
		int la=strlen(a); int lb=strlen(b);
		int temp[102];char product[102];
		memset(temp,0,sizeof(temp));
		memset(product,'0',sizeof(product));
		for(i=0;i<lb;i++){
			int start=i;
			for(j=0;j<la;j++){
				temp[start++]+=c[j]*d[i];
			}	
		}
		for(i=0;i<102;i++){
			if(temp[i]>9){
				temp[i+1]+=temp[i]/10;
				temp[i]=temp[i]%10;
			}
		}
		for(i=101;i>=0;i--)
			if(temp[i]) break;
			int lp=i+1;
			for(i=0;i<lp;i++) product[lp-1-i]=temp[i]+'0';
			product[lp]='\0';
			printf("%s\n",product);	
	}
	
	return 0;
}


08-13 169
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值