zoukankan      html  css  js  c++  java
  • 洛谷 P1303 A*B Problem 高精度乘法

    P1303 A*B Problem

    • 时空限制1s / 128MB

    题目描述

    求两数的积。

    输入输出格式

    输入格式:

    两行,两个数。

    输出格式:

    输入输出样例

    输入样例#1:
    1 
    2
    输出样例#1:
    2

    说明

    每个数字不超过10^2000,需用高精

    ------------------------------------------------------------------------------------------------

    既然有了高精度加减法,那就有高精度乘法

    跟我们平时计算的习惯不同,实际操作的时候不用管两个大整数位数的多少,直接选一个大整数的每一位与另一个大整数的每一位分别相乘后进位,不用管谁上谁下

    而且结果的位数一定不大于两大整数位数的和

    AC代码:

     1 #include<stdio.h>
     2 #include<string.h>
     3 #define maxn 23333
     4 struct BigNum{
     5     int s[maxn],len;
     6     BigNum(){len=1;memset(s,0,sizeof(s));}
     7 };
     8 char ai[maxn],bi[maxn];
     9 BigNum a,b,c;
    10 void ride(BigNum*,BigNum*,BigNum*);
    11 int main(){
    12     scanf(" %s %s",ai,bi);
    13     a.len=strlen(ai);
    14     b.len=strlen(bi);
    15     for(int i=a.len-1;i>=0;i--) a.s[a.len-i]=ai[i]-48;
    16     for(int i=b.len-1;i>=0;i--) b.s[b.len-i]=bi[i]-48;
    17     ride(&a,&b,&c);
    18     for(int i=c.len;i>0;i--) printf("%d",c.s[i]);
    19     return 0;
    20 }
    21 void ride(BigNum *x,BigNum *y,BigNum *z){
    22     z->len=x->len+y->len;
    23     for(int i=1;i<=x->len;i++)
    24        for(int j=1;j<=y->len;j++){
    25            z->s[i+j-1]+=x->s[i]*y->s[j];
    26            z->s[i+j]+=z->s[i+j-1]/10;
    27            z->s[i+j-1]%=10;
    28        }
    29     while(z->len>1&&!z->s[z->len]) z->len--;
    30 }
    高精度乘法
  • 相关阅读:
    PHP项目学习1
    常见的几种单例模式
    CGlib和JDK动态代理
    jar打包方法使用整理
    JVM内存分配原理
    JDK环境变量配置目录jre,jvm
    android学习笔记13——ExpandableListView
    android学习笔记12——ListView、ListActivity
    android学习笔记11——ScrollView
    android学习笔记十——TabHost
  • 原文地址:https://www.cnblogs.com/lpl-bys/p/7783971.html
Copyright © 2011-2022 走看看