日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

浮点数大数相加求和

發布時間:2025/3/16 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浮点数大数相加求和 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(一)兩個非負的浮點數相加

#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <set> #include <map> #include <stack> #include <queue> #include <string> #include <vector> using namespace std;// 判斷是否含有小數點 bool has_dot(string num) {for(int i = 0; i < num.length(); ++i)if(num[i] == '.')return true;return false; }// 獲取小數點的位置 int get_dot_pos(string num) {for(int i = 0; i < num.length(); ++i)if(num[i] == '.')return i; }// 刪除小數后面的尾數0 string del_tail_zero(string num) {while(*(num.end() - 1) == '0')num.erase(num.end() - 1);if(*(num.end() - 1) == '.')num.erase(num.end() - 1);return num; }string add(string a, string b) {reverse(a.begin(), a.end());reverse(b.begin(), b.end());string sum = "";int carry = 0;for(int i = 0; i < a.length(); ++i) {int s = (a[i] - '0') + (b[i] - '0') + carry;sum = sum + char(s % 10 + '0');carry = s / 10;}if(carry == 1)sum.append("1");reverse(sum.begin(), sum.end());return sum; }string get_sum(string a, string b) {bool a_has_dot = has_dot(a), b_has_dot = has_dot(b); // 全部轉化成小數處理if(a_has_dot && !b_has_dot) {b.append(".0");}else if(!has_dot && b_has_dot) {a.append(".0");}else if(!a_has_dot && !b_has_dot) {a.append(".0");b.append(".0");}int a_dot_pos = get_dot_pos(a), b_dot_pos = get_dot_pos(b); // 小數點位置string a_int = a.substr(0, a_dot_pos), b_int = b.substr(0, b_dot_pos); // 獲取整數部分string a_float = a.substr(a_dot_pos + 1, a.length() - a_dot_pos - 1), b_float = b.substr(b_dot_pos + 1, b.length() - b_dot_pos - 1); // 獲取小數部分int int_add_length = abs(int(a_int.length() - b_int.length())), float_add_length = abs(int(a_float.length() - b_float.length())); // 判斷整數和小數上的位數是否相同if(int_add_length != 0) { // 使a和b的整數位位數相同if(a_int.length() > b_int.length()) {reverse(b_int.begin(), b_int.end());for(int i = 0; i < int_add_length; ++i)b_int.append("0");reverse(b_int.begin(), b_int.end());}else {reverse(a_int.begin(), a_int.end());for(int i = 0; i < int_add_length; ++i)a_int.append("0");reverse(a_int.begin(), a_int.end());}}if(float_add_length != 0) { // 使a和b的小數位位數相同if(a_float.length() > b_float.length()) {for(int i = 0; i < float_add_length; ++i)b_float.append("0");}else {for(int i = 0; i < float_add_length; ++i)a_float.append("0");}}string int_ans = add(a_int, b_int); // 整數部分的和string float_ans = add(a_float, b_float); // 小數部分的和if(float_ans.length() > a_float.length()) { // 小數位產生進位int_ans = add(int_ans, "1");float_ans.erase(float_ans.begin());}string ans = "";ans.append(int_ans);ans.append(".");ans.append(float_ans);return del_tail_zero(ans); }int main() {freopen("1.txt", "r", stdin);string a, b;while(cin >> a >> b) {cout << get_sum(a, b) << endl;}return 0; }

(二)任意兩個浮點數相加

總結

以上是生活随笔為你收集整理的浮点数大数相加求和的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。