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]);
}
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐