A*B 问题

A*B 问题

成绩10开启时间2018年02月5日 星期一 17:25
折扣0.8折扣时间2018年12月5日 星期三 17:25
允许迟交关闭时间2018年12月5日 星期三 17:25

问题描述

计算最多20010位十进制正整数A和B的乘积A*B。

输入样例

1259

8

输出样例

10072

 测试输入关于“测试输入”的帮助期待的输出关于“期待的输出”的帮助时间限制关于“时间限制”的帮助内存限制关于“内存限制”的帮助额外进程关于“{$a} 个额外进程”的帮助
测试用例 1以文本方式显示
  1. 1259↵
  2. 8↵
以文本方式显示
  1. 10072↵
1秒64M0

Java版大整数类

import java.math.BigInteger;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		String str1=sc.nextLine();
		String str2=sc.nextLine();
		BigInteger x1=new BigInteger(str1);
		BigInteger x2=new BigInteger(str2);
		System.out.println(x1.multiply(x2));
	}

}

C++:O(n^2)

#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<string>
using namespace std;
int A[40025];
int B[40025];
int ans[40025];//ans[0]用来存储答案的位数
string s;
int main()
{
	int i = 1; int j = 1;
	string str1;
	string str2;
	cin >> str1; cin >> str2;
	int lenA = str1.length();
	int lenB = str2.length();
	for (; i <= lenA; i++)
		A[i] = str1[lenA - i]-'0';
	for (; j <= lenB; j++)
		B[j] = str2[lenB - j]-'0';
	ans[0] = 1;
	for (int i = 1; i <= lenA; i++)
	{
		for ( j = 1; j <= lenB; j++)
		{
			ans[i + j-1] += A[i] * B[j];
		}
	}
	for (int i = 1; i <= lenA+lenB; i++)
	{
		ans[i + 1] += ans[i] / 10; ans[i] %= 10;
	}
	if (ans[lenA + lenB]) ans[0] = lenA + lenB;
	else
		ans[0] = lenA + lenB - 1;
	for (int k = ans[0]; k >= 1; k--)
		printf("%d", ans[k]);
	printf("\n");
	
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水之积也不厚,则其负大舟也无力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值