大整数乘法(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. }
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值