A*B ,TLE
查看原帖
A*B ,TLE
1430495
litianrui0201楼主2025/1/6 15:19
#include<bits/stdc++.h>
using namespace std;
/*
12*34=408
例1: 
	21
	43 *
------------
	84
     63
------------
	804
so:12*34=408
*/
const int MAXN=2e3+10;
int abc[MAXN][MAXN];//第9行~第10行 
int av[MAXN];//第1个乘数 
int bv[MAXN];//第2个乘数  
int cv[MAXN];//积 
int main( ){
	string a,b;cin>>a>>b;
	for(int i=0;i<a.length( );i++)av[i]=a[a.length( )-i-1]-'0';
	for(int i=0;i<b.length( );i++)bv[i]=b[b.length( )-i-1]-'0';//把两个数(string a,b)转换成数组(int av[a.length( )],bv[b.length( )]) 
	for(int i=0;i<b.length( );i++){
		for(int j=0;j<a.length( );j++){
			abc[i][j+i]+=av[j]*bv[i];
			abc[i][j+i+1]+=abc[i][j]/10;//上一位进位
			abc[i][j+i]=abc[i][j]%10;//这一位的值
			//第9行~第10行 的数放入数组 
		}
	}
	for(int i=0;i<b.length( );i++){
		for(int j=0;i<a.length( );j++){
			cv[i]+=abc[i][j]+cv[i]; 
			cv[i+1]+=cv[i]/10;//上一位进位
			cv[i]=cv[i]%10;//这一位的值
			//求积(第9行~第10行的和(第12行))cv[a.length( )+b.length( )+5]
		}
	}
	bool flag=false;
	for(int i=a.length( )+b.length( )+5;i>=0;i--){
		if(cv[i]!=0&&flag==false){
			flag=true;
			cout<<cv[i];
		}else cout<<cv[i];
	}//输出积 
	return 0;
}
2025/1/6 15:19
加载中...