• codevs 3117 高精度练习之乘法


    注意进位问题 还是能处理好的

    #include <iostream>
    #include<cstdio>
    #include <vector>
    #include <sstream>
    #include <string>
    #include <cstring>
    #include <cmath>
    #include <stack>
    #include <algorithm>
    using namespace std;
    
    const int MAXL=505;
    char al[MAXL];
    char bl[MAXL];
    int a[MAXL];
    int b[MAXL];
    int c[MAXL*2]={0};
    int stra;
    int strb;
    int ll;
    
    /*void output()
    {
       for(int i=0;i<stra;i++)
        {
            cout<<a[i]<<" ";
        }
        cout<<endl;
        for(int i=0;i<strb;i++)
        {
            cout<<b[i]<<" ";
        }
        cout<<endl;
    }*/
    
    void input()
    {
    scanf("%s",&al);
    getchar();
    scanf("%s",&bl);
    stra=strlen(al);
    strb=strlen(bl);
    }
    void rever()
    {
        for(int i=0;i<stra;i++)
        {
            a[i]=al[stra-1-i]-'0';///
        }
        for(int i=0;i<strb;i++)
        {
            b[i]=bl[strb-1-i]-'0';///
        }
        //output();
    }
    
    void multi()
    {
         ll=(stra+1)+(strb+1)+1;
        int temp=0;
        int i,j;
        for(i=0;i<stra;i++)
        {
          for(j=0;j<strb;j++)
            {
             temp=a[i]*b[j];
             c[i+j]+=temp%10;///这里为什么不能加判定条件?
             c[i+j+1]+=temp/10;
            }
    
        }
        /*
       for(int i=0;i<=ll;++i)
            cout<<c[i]<<" ";
        cout<<endl;*/
         for(int i=0;i<=ll;i++)
        {
            if(c[i]>9999) c[i+4]+=c[i]/10000;
            c[i]%=10000;
            if(c[i]>999) c[i+3]+=c[i]/1000;
            c[i]%=1000;
            if(c[i]>99) c[i+2]+=c[i]/100;
            c[i]%=100;
            if(c[i]>9) c[i+1]+=c[i]/10;
            c[i]%=10;
        }
    
         /* for(int i=0;i<=ll;++i)
            cout<<c[i]<<" ";
            cout<<endl;*/
    }
    
    void min0()
    {
        ///ll代表最后一位的位数
        for(ll;ll>0;ll--)
        {
            if(c[ll]==0) ll--;
            else break;
        }
        for(int i=ll;i>=0;i--)
        {
          cout<<c[i];
        }
        cout<<endl;
    
    }
    int main()
    {
    input();
    rever();
    multi();
    min0();
    
    return 0;
    }
  • 相关阅读:
    hdu4280 Island Transport(最大流Dinic数组模拟邻接连边)
    hihoCoder1378 (最大流最小割)
    单聊语音
    Mybatis批量更新数据
    mysql 之 MRR
    Intellij IDEA 快捷键整理
    SpringBoot 整合 Swagger2 使用教程
    jdk/dubbo spi
    redis问题(待解决)
    JVM调优心得
  • 原文地址:https://www.cnblogs.com/weiweiyi/p/5130799.html
Copyright © 2020-2023  润新知