高精度乘法
P1303 A*B Problem第一个数的第i位与第二个数的第j位乘起来是放在结果的第i+j-1位 别忘了把两个数字倒过来这里的第几位都是从1开始!速记方法:都看第一位的话,是1+1 = 2.但是开始应该是第一位,所以应该减去一res[i+j-1] += a[i] * b[j]#include<iostream>#include<cstring>#include<a
·
P1303 A*B Problem
第一个数的第i位与第二个数的第j位乘起来是放在结果的第i+j-1位 别忘了把两个数字倒过来
这里的第几位都是从1开始!
速记方法:
都看第一位的话,是1+1 = 2.但是开始应该是第一位,所以应该减去一res[i+j-1] += a[i] * b[j]
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 2010;
int a[N],b[N],res[2*N];
int main()
{
string a1,b1;
cin>>a1>>b1;
int al = a1.length(), bl = b1.length();
for(int i=1;i<=al;i++) a[i] = a1[al - i] - '0';
for(int i=1;i<=bl;i++) b[i] = b1[bl - i] - '0';
for(int i=1;i<=al;i++)
for(int j=1;j<=bl;j++)
{
res[i+j-1] += a[i] * b[j];
}
for(int i=1;i<=al+bl;i++)
if(res[i] >= 10)
{
res[i+1] += res[i] / 10;
res[i] %= 10;
}
int i = al+bl;
while(res[i] == 0 && i > 1) i--;
for(int j=i;j>=1;j--) printf("%d",res[j]);
}
更多推荐
所有评论(0)