简单大数A*B

问题 F: 简单A*B

时间限制: 1 Sec  内存限制: 128 MB
提交: 17  解决: 11
[提交][状态][讨论版]

题目描述

这是一个非常简单的题,计算A*B的值。

输入

第一行:数A

第二行:数B

数A,B是不超过1000位的正整数。


输出

A*B的值,答案独占一行。


样例输入

123456
234567

样例输出

28958703552

提示

代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
    char a[1005],b[1005];
    int i,j,s[2010],l1,l2;
    while(~scanf("%s%s",&a,&b))//多组测试
    {
        if(a[0]=='0'||b[0]=='0')//两种情况,有零和无零,有零的时候,直接输出零即可
        {
            printf("0\n");
        }
        else//无零的情况
        {
            memset(s,0,sizeof(s));//清零
            l1=strlen(a);
            l2=strlen(b);//求长度
            for(i=0; i<l1; i++)
                a[i]=a[i]-'0';
            for(i=0; i<l2; i++)
                b[i]=b[i]-'0';//将字符类型转化成整型
            for(i=0; i<l1; i++)
                for(j=0; j<l2; j++)
                    s[i+j]=s[i+j]+a[i]*b[j];//大数乘法运算每位存储到s数组中
            for(i=l1+l2-2; i>0; i--)
            {
                s[i-1]+=s[i]/10;
                s[i]=s[i]%10;//大数乘法的进位
            }
            for(i=0; i<l1+l2-1; i++)
                printf("%d",s[i]);//倒序输出既得大数乘法的结果
            printf("\n");
        }
    }
    return 0;

}

注释:此种类型仅用于0和正整数!

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页