题目描述:
就是计算A*B(高精)啦。
代码如下
a=int(input()) b=int(input()) printf(a*b)
当然这是python语言(python真好)
下面正题
我们先模拟一下高精度乘法:
2 6 2
x 2 2 2
5 2 4
5 2 4
5 2 4
5 8 1 6 4
是不是有写明白了呢,事实上高精度就有几分返璞归真的感觉,直接回到竖式乘法。
我们先用把输入的字符串s1,s2转化为数组a,b。
用数组c保存a,b数组的每一位乘积,即用数组c[i+j-1]位保存a[i]*b[j]。
这个时候我们得到len为c数组长度。
将c数组进位。
最后倒着输出即好。
下面是代码:
#include<bits/stdc++.h>
using namespace std;
string s1,s2;
int len;
int a[10001],b[10001],c[10001];
int main()
{
cin>>s1;
cin>>s2;
int l1=s1.length();
int l2=s2.length();
for(int i=0; i<l1; i++)//转为数组
{
a[l1-i]=int(s1[i]-48);
}
for(int i=0; i<l2; i++)//转为数组
{
b[l2-i]=int(s2[i]-48);
}
for (int i=1; i<=l1; ++i)
for (int j=1; j<=l2; ++j)
c[i+j-1]+=a[i]*b[j];//将a[i]*b[j]保存在c[i+j-1]中
len=l1+l2;//获取c数组长度
for (int i=1; i<len; ++i)
if (c[i]>9)//进位
{
c[i+1]+=c[i]/10;
c[i]%=10;
}
while (c[len]==0&&len>1)//特判最前面是否有0
len--;
for (int i=len; i>=1; --i)//倒着输出
cout <<c[i];
return 0;
}