大整数乘法(8位)

  1. #include <iostream>
  2. #include <sstream>
  3. #include <string>
  4. #include <cmath>
  5. using namespace std;
  6. int string_to_num(string k)//string字符串变整数型例如str=“1234”,转换为整数的1234.
  7. {
  8.     int back;
  9.     stringstream instr(k);
  10.     instr>>back;
  11.     return back;
  12.     
  13. }
  14. long long ff(string x,string y)//递归函数
  15. {
  16.     int s = x.size();
  17.     string A,B,C,D;
  18.     if( s > 1)
  19.     {
  20.         A = x.substr(0,s/2);
  21.         B = x.substr(s/2,s-1);
  22.         
  23.         C = y.substr(0,s/2);
  24.         
  25.         D = y.substr(s/2,s-1);
  26.     }
  27.     int na = string_to_num(A);
  28.     int nb = string_to_num(B); 
  29.     int nc = string_to_num(C);
  30.     int nd = string_to_num(D);
  31.     long long result = 0;
  32.     if( s == 2)
  33.     {
  34.         result = (na*10+nb) * (nc*10+nd);
  35.         
  36.     }
  37.     else{
  38.         result = ff(A,C)*pow(10.0,s)+((na-nb)*(nd-nc)+ff(A,C)+ff(B,D))*(long long)(pow(10.0,s/2))+ff(B,D);
  39.     }
  40.     return result;
  41. }
  42. int main()
  43. {
  44.     string A,B,C,D;
  45.     string num1,num2;
  46.     long long r;
  47.     cin>>num1>>num2;
  48.     int size = num1.size();
  49.         A = num1.substr(0,size/2);
  50.         B = num1.substr(size/2,size-1);
  51.         
  52.         C = num2.substr(0,size/2);
  53.         
  54.         D = num2.substr(size/2,size-1);
  55.     cout<<A<<” “<<B<<” “<<C<<” “<<D<<endl;
  56.     
  57.     r = ff(num1,num2);
  58.     cout<<num1<<” “<<“*”<<” “<<num2<<” “<<“=”<<” “<<r<<endl;    
  59.     
  60.     return 0;
  61. }

 

    原文作者:大整数乘法问题
    原文地址: https://blog.csdn.net/fableboy/article/details/2954251
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞