[tem]高精度与低精度

 1 //倒着存 B取的低精最大值所以简化了一点
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <cstring>
 5 #include <cmath>
 6 #include <algorithm>
 7 using namespace std;
 8 const int N=1005,B=1e4,W=4,L=1005;
 9 struct people{
10     int a,b,t;
11 }p[N];
12 bool cmp(people x,people y){
13     return x.t<y.t;
14 }
15
16 struct big{
17     int size,d[L];
18     big(int a=1):size(a){memset(d,0,sizeof(int)*L);}
19
20 };
21 bool bigger(big &a,big &b){
22     if(a.size>b.size) return true;
23     if(a.size<b.size) return false;
24     for(int i=a.size-1;i>=0;i++){
25         if(a.d[i]>b.d[i]) return true;
26     }
27     return false;
28 }
29 bool noSmallInt(big &a,int k){    //special
30     if(a.size>1) return true;
31     if(a.d[0]>=k) return true;
32     return false;
33 }
34 void clear0(big &a){
35     a.size=1;
36     memset(a.d,0,sizeof(int)*L);
37 }
38 void copy(big &t,big &s){
39     t.size=s.size;
40     memcpy(t.d,s.d,sizeof(int)*L);
41 }
42
43 void chengInt(big &a,int k){
44     int g=0,i;
45     for(i=0;i<a.size;i++){
46         int tmp=a.d[i]*k;
47         a.d[i]=(tmp+g)%B;
48         g=(tmp+g)/B;
49     }
50     while(g){
51         a.d[i++]=g%B; a.size++;
52         g/=B;
53     }
54 }
55
56 void jianInt(big &a,int k){
57     if(a.d[0]<k){
58         int i=1;a.d[0]+=B;
59         while(a.d[i]==0) {a.d[i]+=B;i++;}
60         a.d[i]--;
61         while(i==a.size-1&&a.d[i]==0) a.size--,i--;
62     }
63     a.d[0]-=k;
64 }
65
66 void addInt(big &a,int k){
67     int g,i=0,tmp=a.d[0]+k;
68     a.d[0]=tmp%B;
69     g=tmp/B;
70     while(g){
71         tmp=a.d[++i]+g;
72         a.d[i]=tmp%B; if(i>a.size-1) a.size=i+1;
73         g=tmp/B;
74     }
75 }
76
77 void chuInt(big &a,int k){
78     int g=0;
79     for(int i=a.size-1;i>=0;i--){
80         g=g*B+a.d[i];
81         a.d[i]=g/k;
82         g%=k;
83     }
84     while(a.d[a.size-1]==0) a.size--;
85 }
时间: 2024-10-08 02:39:56

[tem]高精度与低精度的相关文章

ORACLE 中NUMBER 类型 低精度转换成高精度

例如: 表User中有一个字段 salary  Number(10,3), 如果想把字段salary的类型提高精度到salary  Number(10,6),保留六位小数, 解决办法:1,ALTER TABEL USER MODIFY SALARY NUMBER(13,6); 解释:number类型刚开始是,长度10位,3位小数,如果想增加3位小数,对应的长度也必须增加,否则无法修改.所以NUMBER(13,6);这样就可以提高精度了, ORACLE 中NUMBER 类型 低精度转换成高精度

网络游戏中的(低精度)时间同步

对于网络游戏来说,从物体的移动.攻击到最基础的计时等等,都需要客户端与服务器保持时间的相对一致,那么服务器与客户端同步便是一个必须要解决的问题.通常,网络游戏都会利用心跳来进行同步,那么当客户端并不需要如此精度的同步时,有没有其他方法呢?这里主要讨论低精度的时间同步(精确到秒). 工作中接触过3种简单的时间同步方法: 首先,定义时间同步类 /// 32位操作系统 typedef unsigned int64_t QWORD; typedef unsigned long DWORD; class

int类型被强制转换成较低精度的byte类型

公司的项目上线之前会进行代码合规性检查,其中很容易违反的一个规则就是“不要把原始类型转换成较低的精度”,实际开发的过程中,很多方法在处理数据时,尤其在做移位操作的时候,难免要把int类型转换成byte类型,这时候就不可避免得出现原始类型转换成较低精度的情况,没有什么简便的方法,只能通过调用ByteArrayOutputStream,DataOutputStream 来处理.把处理过程封装到一个函数中.然后在进行类型转化的时候调用函数.处理函数如下: public byte intToButeAr

【POJ2325】Persistent Numbers 贪心+高精度/低精度

题意:我们可以把一个数A变成B=A的各位乘积,现在给出B,求是否可以有某个A通过计算得到B,有的话,是多少. 题解:贪心. 我们先分解B,若质因数有大于等于10的显然就不行了. 否则则一定可以把他的各因数排在一起成为A,使A的各位乘积=B. 贪心策略:把小数放前面. 注意: 一.不一定要质因数,10以内即可. 二.需要高精度. 三.A!=B 代码: #include <cstdio> #include <cstring> #include <algorithm> #de

golang 高效低精度定时器实现

golang默认定时器是通过time模块提供的,不管是golang,libev,libevent也好,定时器都是通过最小堆实现的,导致加入定时器时间复杂度为O(lgn),在需要大量定时器时效率较低,所以Linux提供了基于时间轮的实现,我们本次提供的 定时器实现就是标准的Linux时间轮实现方式.当然,我是把Skynet(https://github.com/cloudwu/skynet/blob/master/skynet-src/skynet_timer.c)的定时器移植了过来,偷窃无罪..

[tem]高精度2

从1开始 const int N=85; const int B=1e4,L=100; struct big{ int size,d[L]; big(int a=1):size(a){memset(d,0,sizeof(int)*L);} }; void jia(big &a,big &b){ int g=0,i; for(i=1;;i++){ if(g==0&&i>a.size&&i>b.size) break; int tmp=g; if(i

高精度模板(含加减乘除四则运算)

高精度加高精度 1 void BigAddBig(char *a, char *b, char *c) 2 { 3 //a表示结果,b,c位加数 4 int a_int[1005] = { 0 }, b_int[1005] = { 0 }, c_int[1005] = { 0 }; 5 int len1, len2, len, i; 6 len1 = strlen(b); 7 len2 = strlen(c); 8 for (i = 0; i < len1; i++) 9 b_int[i] =

高精度计算 除法 高精除以低精

高精度就是很长很长的数字 低精就是可以直接存在基本类型(int short double...)的数字 两个正整数,一个是高精度,一个是低精度,求整除部分,不求余数.//其实就算要负数也很好解决 //两个正整数,高精度除以低精度,只求整除部分,不求余数 #include<iostream> #include<stdio.h> #include<string.h> using namespace std; int main() { char a1[100]; int a[

java学习笔记——韩顺平视频

第0讲:开山篇 1.  Java se J2se        桌面 Java ee J2ee        网络 Java me J2me        手机 2.  SQL server   Mysql   Oracle 3. 学习软件编程的注意事项 1.高效愉快学习 2.先建立一个整体框架然后细节 3.用什么再学习什么 4.先知道how,再知道why 5.软件编程是一门"做中学"学科,做了才会 6.适当囫囵吞枣 7.琢磨别人怎么做,不是我认为这么做 第1讲  内容介绍.项目演示.