zoukankan      html  css  js  c++  java
  • 《信息学奥赛一本通》 高精度乘法。输入两个正整数,求它们的积。

    代码

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    using namespace std;
    int main ()
    {
     char a1[101],b1[101];
     int a[101],b[101],c[10001],lena,lenb,lenc,i,j,x;
     memset(a,0,sizeof(a));
     memset(b,0,sizeof(b));
     memset(c,0,sizeof(c));
     scanf("%s",a1);
     scanf("%s",b1);
     lena=strlen(a1);
     lenb=strlen(b1);
     for(i=0;i<=lena-1;i++)
     {//把乘数1放入a数组
      a[lena-i]=a1[i]-48;                   
     }
     for(i=0;i<=lena-1;i++)
     {//把乘数2放入b数组
      b[lena-i]=b1[i]-48;                  
     }
     for(i=1;i<=lena;i++)
     {
      x=0;            //用于存在进位
      for(j=1;j<=lenb;j++)             
      {//对乘数的每一位进行处理         
       c[i+j-1]=a[i]*b[j]+x+c[i+j-1];     
       //当前乘积+上次乘积进位+原数    
       x=c[i+j-1]/10;                 
       c[i+j-1]%=10;                 
      }                                     
      c[i+lenb]=x;
      //进位
     }
     lenc=lena+lenb;
     while(c[lenc]==0&&lenc>1)
     {//删除前导0
      lenc--;
     }
     for(i=lenc;i>=1;i--)
     {
      cout<<c[i];
     }
     cout<<endl;
     return 0;
    }
    

    升级版代码

    #include <cmath>
    #include <cstdio>
    #include <cstring>	
    #include <iostream>
    using namespace std;
    int a[10000];
    string s1,s2;
    void addd()
    {
    	int a1=s1.size(),a2=s2.size();
    	for (int i=0;i<a1;i++)
    	  for (int j=0;j<a2;j++)
    	    a[a1-i+a2-j-1]+=(s1[i]-'0')*(s2[j]-'0');
    	for (int i=1;i<=a1+a2;i++) { a[i+1]+=a[i]/10; a[i]%=10; }
    	a[0]=a1+a2; while (a[a[0]]==0&&a[0]>1) a[0]--;
    }
    int main()
    {
        getline(cin,s1);
        getline(cin,s2);
        memset(a,0,sizeof(a));
        addd();
        for (int i=a[0];i>=1;i--) cout<<a[i];
        cout<<endl;
    	return 0;
    }
    
  • 相关阅读:
    android之PackageManager简单介绍
    西门子PLC学习笔记二-(工作记录)
    node.js第十课(HTTPserver)
    ubuntu ???????????? no permissions 问题解决
    Web API 设计摘要
    公共 DNS server IP 地址
    用Unicode迎接未来
    vs2010公布时去除msvcp100.dll和msvcr100.dll图讲解明
    linux串口驱动分析
    C++ 中dynamic_cast&lt;&gt;的用法
  • 原文地址:https://www.cnblogs.com/AlexKing007/p/12339517.html
Copyright © 2011-2022 走看看