模板:高精度浮点数相乘

 1 #include <string>

 2 #include <vector>

 3 #include <algorithm>

 4 

 5 string mul(string str1,string str2)

 6 {

 7     vector<int> v_res(str1.size()+str2.size(),0);

 8     string::size_type i,j;

 9     vector<int>::size_type k,p;

10 

11     reverse(str1.begin(),str1.end());

12     reverse(str2.begin(),str2.end());

13     for(i = 0; i != str1.size(); ++i)

14     {

15         for(j = 0; j != str2.size(); ++j)

16         {

17             v_res[i+j] += (str1[i]-'0') * (str2[j] - '0');

18         }

19     }

20     for(k = 0; k != v_res.size() - 1; ++k)

21     {

22         v_res[k+1] += v_res[k] / 10;

23         v_res[k] = v_res[k] % 10;

24     }

25 

26     for(p = v_res.size() - 1; p != -1; --p)

27     {

28         if(v_res[p] != 0) break;

29     }

30     if(p == -1) p = 0;

31 

32     string s_res(p+1,'0');

33     for(k = p; k != -1; --k) s_res[p-k] = char(v_res[k] + '0');

34     

35 

36     return s_res;

37 

38 }

39 

40 string real_mul(string str1,string str2)

41 {

42     string::size_type idx_str1_point = str1.find(".");

43     if(idx_str1_point == string::npos)

44     {

45         str1 += ".0";

46         idx_str1_point = str1.find(".");

47     }

48     str1.erase(idx_str1_point,1);

49 

50     string::size_type idx_str2_point = str2.find(".");

51     if(idx_str2_point == string::npos)

52     {

53         str2 += ".0";

54         idx_str2_point = str2.find(".");

55     }

56     str2.erase(idx_str2_point,1);

57 

58     string::size_type dec_res_len = (str1.size() - idx_str1_point) + (str2.size() - idx_str2_point);

59 

60     string res = mul(str1,str2);

61 

62     if(res.size() < dec_res_len + 1)

63     {

64         res = string(dec_res_len + 1 - res.size(),'0') + res;

65     }

66 

67     res.insert(res.size() - dec_res_len,".");

68 

69     string::size_type idx_res_tail = res.find_last_not_of("0");

70     res = res.substr(0,idx_res_tail+1);

71 

72     if(res[res.size() - 1] == '.') res.erase(res.size()-1);

73 

74     return res;

75 }

 

你可能感兴趣的:(浮点数)