新思路,先乘完储存,求助,谢谢各位大佬!!!(详请见帖内)
查看原帖
新思路,先乘完储存,求助,谢谢各位大佬!!!(详请见帖内)
425912
罗非鱼Requiem楼主2021/12/5 15:49

新思路,二维数组,先乘完储存,最后再加,求助,小数据能过,大数据出错,编译运行没问题,谢谢各位大佬!!!

#include <cmath>
#include <vector>
#include <string>
#include <bits/stdc++.h>

using namespace std;

int S[10007][10007], S1[10005], S2[10005], sum[10010], s=0;
string s1, s2;

int main() {
	cin >> s1 >> s2;
	
	for(int i=0;i<s1.length();i++)
		S1[i] = s1.at(s1.length()-i-1)-'0';
	for(int i=0;i<s2.length();i++)
		S2[i] = s2.at(s2.length()-i-1)-'0';
	
	int len = s1.length()+s2.length();
	
	for(int i=0;i<=len;i++) 
	{
		for(int j=0;j<=len;j++) 
		{
			S[i][j+i] = S1[j]*S2[i] + s;
			s = S[i][j+i]/10;
			S[i][j+i] %= 10;
		}
	}
	
	for(int i=0;i<=len;i++) {
		for(int j=0;j<=len;j++)
			sum[j] += S[i][j];
	}
	
	for(int i=0;i<=len;i++) {
		if(sum[i]/10 != 0) {
			sum[i] %= 10;
			sum[i+1]++;
		}
	}
	
	int index=len;
	while(sum[index]==0)
		index--;
	
	for(int i=index;i>=0;i--)
		cout << sum[i];
		
	if(index<0)
		cout << 0;
	
	return 0;
}
2021/12/5 15:49
加载中...