zoukankan      html  css  js  c++  java
  • 输入两个很大的正数(用C字符串表示),输出他们的乘积,将设不考虑非法输入。

     1 #include<iostream>
     2 #include<cassert>
     3 void multiply(const char *a,const char *b)
     4 {
     5     assert(a!=NULL && b!=NULL);
     6     int i,j,ca,cb,*s;
     7     ca=strlen(a);
     8     cb=strlen(b);
     9     s=(int *)malloc(sizeof(int)*(ca+cb));  //分配存储空间
    10     for(i=0;i<ca+cb;i++)
    11         s[i]=0;                     //每个元素赋初值为0
    12 
    13     
    14     for(i=0;i<ca;i++)
    15         for(j=0;j<cb;j++)
    16             s[i+j+1]+=(a[i]-'0')*(b[j]-'0');  //两个嵌套的for循环,将字符串中的数字通过-‘0’ 
    17     for(i=ca+cb-1;i>=0;i--)                   //转换为十进制数字
    18         if(s[i]>=10)
    19         {
    20             s[i-1]+=s[i]/10;                   
    21             s[i]%=10;
    22         }
    23 
    24 char *c=(char *)malloc((ca+cb)*sizeof(char)); 25 i=0; 26 while(s[i]==0) 27 i++; 28 for(j=0;i<ca+cb;i++,j++) //将十进制数字转换为字符,存储到字符数组中 29 c[j]=s[i]+'0'; 30 c[j]=''; 31 for(i=0;i<ca+cb;i++) 32 std::cout<<c[i]; 33 std::cout<<std::endl; 34 free(s); 35 free(c); 36 } 37 38 int main() 39 { 40 const char *strnum1="123"; 41 const char *strnum2="456"; 42 multiply(strnum1,strnum2); 43 return 0; 44 }

  • 相关阅读:
    UVa10917
    T^T online judge 2952
    AcWing 105.七夕祭
    AcWing 99.激光炸弹(二维前缀和)
    AcWing 97.约数之和
    AcWing 95. 费解的开关
    ccf/csp 2018 12 小明放学
    BNUOJ 33535 Final Exam Arrangement
    分块
    sublime安装配置
  • 原文地址:https://www.cnblogs.com/mydomain/p/9610412.html
Copyright © 2011-2022 走看看