高精度算法一:加法和减法

#include <iostream> #include <Windows.h> using namespace std; #define MAXSIZE 100 ////高精度算法 struct Data { int len; //数据长度 int s[MAXSIZE]; // 保存数据数组 }; void StringToData(const string& s, Data& d) //将string 转换为Data { if (s.size() == 0) { return; } ZeroMemory(&d, sizeof(d)); d.len = s.length(); for (int i = 0; i < d.len; ++i) { d.s[i] = s[d.len - i - 1] - '0'; //比如说s ="123",那么s依次为3、2、1 } } void Display(const Data& d) { for (int i = d.len - 1; i >= 0; --i) { cout<<d.s[i]; } } void Add(const Data& d1, const Data& d2, Data& ret) //高精度加法 { int len; int distance_len = 0; //长度差 bool flag = 0; //默认的是d1长 if (d1.len > d2.len ) { len = d2.len; distance_len = d1.len - d2.len; } else { len = d1.len; distance_len = d2.len - d1.len; flag = 1; } ZeroMemory(&ret, sizeof(ret)); int temp = len; //先把多余的数据保存在ret for (int i = 1; i <= distance_len; ++i) { if (flag) { ret.s[temp] = d2.s[len + i - 1]; } else { ret.s[temp] = d1.s[len + i - 1]; } ++temp; } for (int i = 0; i < len; ++i) { ret.s[i] = d1.s[i] + d2.s[i]; } ////////进位处理,如果大于10的话进1 for (int i = 0 ; i < len + distance_len; ++i) { if (ret.s[i] >= 10) { ret.s[i] -= 10; ret.s[i + 1] ++; } } ret.len = distance_len + len; if (ret.s[len + distance_len] > 0) { ++ret.len; } } void Subtract( Data& d1, Data& d2, Data& ret) //假定d1>=d2 { ZeroMemory(&ret, sizeof(ret)); ret.len = d1.len; for (int i = 0; i < d1.len; ++i) { ret.s[i] = d1.s[i] - d2.s[i] + 10; d1.s[i + 1] = d1.s[i + 1] - 1 +ret.s[i]/10; ret.s[i] %= 10; } int j = 0; while (ret.s[j]==0 && j < ret.len) j++; if (j == ret.len) //如果结果全部为0 { ret.len = 1; //长度为1 return; } while (ret.s[ret.len - 1] == 0) //把后面的0滤掉 { ret.len--; } } int main() { string s1 = "130000000000000000000000"; Data a; StringToData(s1, a); string s2 = "455555500000"; Data b; StringToData(s2, b); Data c; Subtract(a, b, c); Display(c); cout<<endl; string s3= "130000000000000000000000"; Data e; StringToData(s3, e); string s4 = "455555500000"; Data f; StringToData(s4, f); Data g; Add(e, f, g); Display(g); return 0; }

 

你可能感兴趣的:(c,算法,String,struct,include,distance)