2018年北京信息科技大学第十届程序设计竞赛暨ACM选拔赛 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串的乘积。
//我的队友是用java的BigInteger写的,我这里用一个c++的大数模板 
#include<bits/stdc++.h>
using namespace std;
const double Pi=3.1415926535898;
int main()
{
	int T,i,j,k;	
	string q1,q2,q3;
    int a[100000],b[100000],c[100000];
	cin>>T;
	while(T--)
	{
		cin>>q1>>q2;
		memset(a,0,sizeof(a));
  	  	memset(b,0,sizeof(b));
  	  	memset(c,0,sizeof(c));    
		a[0]=q1.length();
   	 	b[0]=q2.length();
   	 	for(i=1;i<=a[0];i++)
      		a[i]=q1[a[0]-i]-48;
   	 	for(i=1;i<=b[0];i++)
        	b[i]=q2[b[0]-i]-48;
    	int x;
    	for(i=1;i<=a[0];i++)
   	 	{
        	x=0;
        	for(j=1;j<=b[0];j++)
        	{
            	c[i+j-1]+=a[i]*b[j]+x;
            	x=c[i+j-1]/10;
           	 c[i+j-1]%=10;
        	}
       	 	c[i+b[0]]=x;
   	 	}
   		 	int lenc=a[0]+b[0];
    	while(c[lenc]==0&&lenc>1)
        	lenc--;
    	for(i=lenc;i>=1;i--)
        	cout<<c[i];
   	 	cout<<endl;
	 	
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/ant_e_zz/article/details/80215876
今日推荐