A*B(高精度)
  • 板块学术版
  • 楼主20091113swdsr
  • 当前回复25
  • 已保存回复25
  • 发布时间2024/8/7 09:25
  • 上次更新2024/8/7 10:16:24
查看原帖
A*B(高精度)
951106
20091113swdsr楼主2024/8/7 09:25

第一行读入一个整数T(1≤T≤10),表示一共要计算多少次乘积。 接下来一共T行,每行两个不超过200位的整数ai,bi,表示要计算乘积的两个数,两数之间以一个空格分隔。 输出格式 一共输出T行,每行一个整数表示ai×bi的结果。 格式说明 输出时每行末尾的多余空格,不影响答案正确性 输入、输出要求 要求使用「文件输入、输出」的方式解题,输入文件为bigmul.in,输出文件为bigmul.out 样例输入

2 2 3 22222222 99999999

6 2222222177777778

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
string num1, num2;
int a1[105][15], a2[105][15], len1, len2, a[205][15], len;
int main() {
	int t,m=1;
	cin>>t;
	for(int i=1;i<=t;i++){
		cin >> num1 >> num2;
		len1 = num1.size();
		for (int i = 0; i < len1; i++) {
			a1[i][m] = num1[len1 - 1 - i] - '0';
		}
		len2 = num2.size();
		for (int i = 0; i < len2; i++) {
			a2[i][m] = num2[len2 - 1 - i] - '0';
		}
		for(int i=0;i<len1;i++){
			for(int j=0;j<len2;j++){
				a[i+j][m]+=a1[i][m]*a2[j][m];
			}
		}
		len=len1+len2-1;    
		for (int i = 0; i < len; i++) {
			a[i + 1][m] += a[i][m] / 10;
			a[i][m] %= 10;
		}	
		while (a[len][m]) {
			a[len + 1][m] += a[len][m] / 10;
			a[len][m] %= 10;
			len++;
		}
		for (int i = len - 1; i >= 0; i--) {
			cout << a[i][m];
		}
		cout << endl;
		m++;
	}
	
	return 0;
}

样例过了 为什么不过啊(运行错误AC 50%)

2024/8/7 09:25
加载中...