zoukankan      html  css  js  c++  java
  • 大数相乘

    大数相乘的实现,在这里,采用最直接的实现方法:类似于手工计算,逐位相乘。

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 //反转字符,使其符合数组低位为数字低位
     6 void reverseNum(char* s1)
     7 {
     8     int i=0;
     9     int j=strlen(s1)-1;
    10     while(i<j)
    11     {
    12         char temp=s1[i];
    13         s1[i]=s1[j];
    14         s1[j]=temp;
    15         ++i;
    16         --j;
    17     }
    18 }
    19 
    20 //输入两个数字字符串,进行相乘,并返回结果字符串
    21 char* BigNumMultiple(char* s1,char* s2)
    22 {
    23     //反转数字
    24     reverseNum(s1);
    25     reverseNum(s2);
    26 
    27     int temp1,temp2,addFlag,multiFlag;
    28     int len1=strlen(s1);
    29     int len2=strlen(s2);
    30     temp1=temp2=0;
    31 
    32     char* result=new char[len1+len2+1];
    33     memset(result,48,len1+len2);
    34     result[len1+len2]='';
    35 
    36     //相乘
    37     for(int i=0;i<=len1-1;i++)
    38     {
    39         multiFlag=0;
    40         addFlag=0;
    41         for(int j=0;j<=len2-1;j++)
    42         {
    43             temp1=(s1[i]-'0')*(s2[j]-'0')+multiFlag;
    44             multiFlag=temp1/10;
    45             temp1=temp1%10;
    46             temp2=(result[i+j]-'0')+temp1+addFlag;
    47             result[i+j]=temp2%10+'0';
    48             addFlag=temp2/10;
    49         }
    50         result[i+len2]+=multiFlag+addFlag;
    51     }
    52 
    53     //去除高位多余的0
    54     int n=strlen(result)-1;
    55     while(result[n]=='0')
    56     {
    57         //确保结果为0的时候不会把最后一个0清空掉
    58         if(n==0)
    59             break;
    60         result[n]='';
    61         n--;
    62     }
    63     
    64     //恢复数字的字符串显示
    65     reverseNum(s1);
    66     reverseNum(s2);
    67     reverseNum(result);
    68 
    69     return result;
    70 }
    71 
    72 //简单测试
    73 int main()
    74 {
    75 while(true)
    76 {
    77     char* left=new char[100];
    78     char* right=new char[100];
    79     char* str;
    80     cin.getline(left,100);
    81     cin.getline(right,100);
    82     str=BigNumMultiple(left,right);
    83     cout<<left<<"*"<<right<<"=
    "<<str<<endl;
    84     system("pause");
    85 }
    86 }
  • 相关阅读:
    WEB引入Google思源黑体
    Linux安装最新版Node.js
    JS判断值是否是数字
    高效jQuery的奥秘
    一个Web前端工程师或程序员的发展方向,未来困境及穷途末路
    javascript 模块化 (切记:学习思想)
    学习 正则表达式 js java c# python 通用
    Promise如何解决回调地狱
    VSCode 开发插件 推荐
    js移动端自适应动态设置html的fontsize
  • 原文地址:https://www.cnblogs.com/lsr-flying/p/4741106.html
Copyright © 2011-2022 走看看