九度1003(高精度模板)
来源:互联网 发布:淘宝卖家下载什么软件 编辑:程序博客网 时间:2024/05/01 04:31
题目链接:http://ac.jobdu.com/problem.php?pid=1003
解题思路:
高精度模板,计算之后要特殊判断负号问题。另外要注意-0这种情况,即res = 0的话,前面不能出现负号。
完整代码:
#include <functional>#include <algorithm>#include <iostream>#include <fstream>#include <sstream>#include <iomanip>#include <numeric>#include <cstring>#include <climits>#include <cassert>#include <complex>#include <cstdio>#include <string>#include <vector>#include <bitset>#include <queue>#include <stack>#include <cmath>#include <ctime>#include <list>#include <set>#include <map>using namespace std;#pragma comment(linker, "/STACK:102400000,102400000")typedef long long LL;typedef double DB;typedef unsigned uint;typedef unsigned long long uLL;/** Constant List .. **/ //{const int MOD = int(1e9)+7;const int INF = 0x3f3f3f3f;const LL INFF = 0x3f3f3f3f3f3f3f3fLL;const DB EPS = 1e-9;const DB OO = 1e20;const DB PI = acos(-1.0); //M_PI;/**BigNumber **/const int ten[4] = {1 , 10 , 100 , 1000};const int maxl = 1000;struct BigNumber{ int d[maxl]; BigNumber(string s){ int len = s.size(); d[0] = (len - 1) / 4 + 1; int i , j , k; for(i = 1 ; i < maxl ; i ++) d[i] = 0; for(i = len - 1 ; i >= 0 ; i --){ j = (len - i - 1) / 4 + 1; k = (len - i - 1) % 4; d[j] += ten[k] * (s[i] - '0'); } while(d[0] > 1 && d[d[0]] == 0) --d[0]; } BigNumber(){ *this = BigNumber(string("0")); } string toString(){ string s(""); int i , j , temp; for(i = 3 ; i >= 1 ; i --){ if(d[d[0]] >= ten[i]) break; } temp = d[d[0]]; for(j = i ; j >= 0 ; j --){ s = s + (char)(temp / ten[j] + '0'); temp %= ten[j]; } for(i = d[0] - 1 ; i > 0 ; i --){ temp = d[i]; for(j = 3 ; j >= 0 ; j --){ s = s + (char)(temp / ten[j] + '0'); temp %= ten[j]; } } return s; }}zero("0") , d , temp , midl[15];BigNumber operator + (const BigNumber &a , const BigNumber &b){ BigNumber c; c.d[0] = max(a.d[0] , b.d[0]); int i , x = 0; for(i = 1 ; i <= c.d[0] ; i ++){ x = a.d[i] + b.d[i] + x; c.d[i] = x % 10000; x /= 10000; } while(x != 0){ c.d[++c.d[0]] = x % 10000; x /= 10000; } return c;}BigNumber operator - (const BigNumber &a , const BigNumber &b){ BigNumber c; c.d[0] = a.d[0]; int i , x = 0; for(i = 1 ; i <= c.d[0] ; i ++){ x = 10000 + a.d[i] - b.d[i] + x; c.d[i] = x % 10000; x = x / 10000 - 1; } while((c.d[0] > 1) && (c.d[c.d[0]] == 0)) -- c.d[0]; return c;}//////////////End·········//////////////////////////////////////string t1 , t2;bool check(string a , string b){ int lena = a.length(); int lenb = b.length(); if(lena > lenb) return true; else if(lena == lenb) return a > b; else if(lena < lenb) return false;}int main(){ #ifdef DoubleQ freopen("in.txt","r",stdin); #endif std::ios::sync_with_stdio(false); std::cin.tie(0); while(cin >> t1 >> t2) { int len1 = t1.length(); int len2 = t2.length(); string a = "" , b = ""; int flag1 = 0 , flag2 = 0; for(int i = 0 ; i < len1 ; i ++) { if(t1[i] == '-') { flag1 = 1; continue; } if(t1[i] == ',') continue; else a += t1[i]; } for(int i = 0 ; i < len2 ; i ++) { if(t2[i] == '-') { flag2 = 1; continue; } if(t2[i] == ',') continue; else b += t2[i]; } BigNumber res1(a) , res2(b) , res; int flag = 0; if(flag1 == 1) { if(flag2 == 0) { if(check(a , b)) { res = res1 - res2; if(res.toString() != "0") flag = 1; } else { res = res2 - res1; } } else { res = res1 + res2; if(res.toString() != "0") flag = 1; } } else { if(flag2 == 0) { res = res1 + res2; } else { if(check(a , b)) { res = res1 - res2; } else { res = res2 - res1; if(res.toString() != "0") flag = 1; } } } if(flag) cout << "-" ; cout << res.toString() << endl; }}
0 0
- 九度1003(高精度模板)
- 高精度冪(模板)
- 高精度模板(大数)
- 高精度模板(转载)
- 高精度(模板)
- 高精度模板(压位版)
- 高精度模板(乘法)
- 高精度模板(减法)
- 九度OJ1100最短路径(高精度)
- 高精度类(刘如佳模板)
- 大数高精度运算(模板)
- 大数(相加,高精度)模板
- 【模板】高精度(加减乘)
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- Ubuntu14.04 error while loading shared libraries: libgtk-x11-2.0.so.0
- 软件架构---工程理论篇
- SQL中SUBSTRING函数的用法
- 何志丹软件架构师、高级程序员证书备案,方便以后交流、找工作
- PHP版的ftok函数实现
- 九度1003(高精度模板)
- STM32 自定义HID USB设备的实现
- linux中nslookup查询ns
- 淘宝最基础的优化:标题优化
- Reverse Linked List II
- 绘制 乘法口诀表
- 数据库表备份SQL语句
- .Net 获取文件的CRC32标识
- [Leetcode]Linked List Cycle