高精度 四位压缩

高精度 四位压缩

基本原理: 建立一个数组 每一位上存4位数字 运用一定的方法运算,以实现大整数的运算;

封装在了结构体内;

目前只有高精度+高精度、高精度*单精度、max(高精度,高精度);

代码:

//高精度四位压缩================================================
const int M=85,mod=10000;
struct HP {
    int p[505],len;
    HP() {
        memset(p,0,sizeof(p));
        len=0;
    }//初始化一个高精度变量
    void put_out() { //输出
        printf("%d",p[len]);
        for(int i=len-1; i>0; i--) {
            if(p[i]==0) {
                printf("0000");
                continue;
            }
            for(int k=10; k*p[i]<mod; k*=10)printf("0");
            printf("%d",p[i]);

        }
    }
} f[M][M],base[M],ans;
//高精+高精 O(len)
HP operator + (const HP &a,const HP &b) {
    HP c;
    c.len=max(a.len,b.len);
    int x=0;
    for(int i=1; i<=c.len; i++) {
        c.p[i]=a.p[i]+b.p[i]+x;
        x=c.p[i]/mod;
        c.p[i]%=mod;
    }
    if(x>0)c.p[++c.len]=x;
    return c;
}
//高精*单精 O(len)
HP operator * (const HP &a,const int &b) {
    HP c;
    c.len=a.len;
    int x=0;
    for(int i=1; i<=c.len; i++) {
        c.p[i]=a.p[i]*b+x;
        x=c.p[i]/mod;
        c.p[i]%=mod;
    }
    while(x>0) {
        c.p[++c.len]=x%mod;
        x/=mod;
    }
    return c;
}
//max 高精
HP max (const HP &a,const HP &b) {
    if(a.len>b.len)
        return a;
    if(a.len<b.len)
        return b;
    for(int i=a.len; i>0; i--) {
        if(a.p[i]>b.p[i])
            return a;
        if(a.p[i]<b.p[i])
            return b;
    }
    return a;
}
//================================================

原文地址:https://www.cnblogs.com/geraldg/p/12424114.html

时间: 2024-11-16 12:16:06

高精度 四位压缩的相关文章

C语言(7)--高精度加法、减法、乘法、今天是星期几、四位平方数、候选人选票问题

1.高精度加法.减法.乘法 #include <stdio.h> #include <string.h> #include <malloc.h> void plus(char *a,char *b,char *c);//自定义高精度加法函数 void sub(char *a,char *b,char *c);//自定义高精度减法函数 void multiply(char *a,char *b,char *c);//自定义高精度乘法函数 int main() { char

一种压缩图片的方法---Machine learning 之 K-Means

背景描述: RGB编码:对于一个直接用24bit表示每一个而像素的图像来说,每一个pixel使用8-bit无符号整数(0-255)来表示红or绿or蓝. 压缩目的: 将128x128大小的图片由原来的24bit表示-压缩成->16bit表示每一个像素的图像. 压缩方法: 对于每一个pixel, 使用 K-Means选择16bits来表示原来的24bits.当然,具体是通过计算每一个像素空间的16bits大小的聚类来表示原来的24bits. 实现步骤: 1.将原来的128x128大小的图片读入到一

tyvj 1934 高精度

「Poetize3」Heaven Cow与God Bull From wwwwodddd 背景 Background __int64 ago,there's a heaven cow called sjy...A god bull named wzc fell in love with her...As an OI & MOer,wzc gave sjy a quesiton... 描述 Description 给定一个整数n,求一个整数m,满足m<=n,并且m/phi(m)的值最大.注:p

【高精度】NCPC 2014 C catalansqure

题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1789 题目大意: 求大卡特兰数..公式如下.输入n求Sn(n<=5000) 题目思路: [高精度] Sn=Cn+1.直接压四位高精度算一遍就好.只要写高精度乘单精度,高精度除单精度. 1 // 2 //by coolxxx 3 //#include<bits/stdc++.h> 4 #include<iostream> 5 #include<algorith

hdoj 1250 Hat&#39;s Fibonacci 【高精度】

Fibonacci... 策略:用Java 做这道题较简单一些,但是,C语言是基础. 用java的话,就是最简单的BigInteger的使用. 下面简单讲一下C语言的做法: 一个12位的整数,可以表示为,3个四位的整数的集合,例如123412341234就可以转化为1234, 1234, 1234.下面的就是按照此原理做的. c代码: #include <stdio.h>//每一个int都代表6个数. #include <string.h> #define M 10000 int

bzoj 1223: [HNOI2002]Kathy函数 数位DP 高精度

1223: [HNOI2002]Kathy函数 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 207  Solved: 90[Submit][Status] Description Input 仅有一行,为正整数m Output 输出仅有一个正整数,表示所有的满足f(n)=n,(n<=m) 的自然数的个数. Sample Input 5 Sample Output 3 这道题的高精度模板相对又有完善,但还存在bugs,使用时尽量讲位数多开几倍.

图片处理之-Bitmap.Config,jpeg压缩与大小

关于ARGB_8888.ALPHA_8.ARGB_4444.RGB_565的理解 A:透明度 R:红色 G:绿 B:蓝 Bitmap.Config ARGB_4444:每个像素占四位,即A=4,R=4,G=4,B=4,那么一个像素点占4+4+4+4=16位 Bitmap.Config ARGB_8888:每个像素占四位,即A=8,R=8,G=8,B=8,那么一个像素点占8+8+8+8=32位 Bitmap.Config RGB_565:每个像素占四位,即R=5,G=6,B=5,没有透明度,那么一

bzoj 1002 [FJOI2007]轮状病毒 高精度&amp;&amp;找规律&amp;&amp;基尔霍夫矩阵

1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2234  Solved: 1227[Submit][Status] Description 给定n(N<=100),编程计算有多少个不同的n轮状病毒. Input 第一行有1个正整数n. Output 将编程计算出的不同的n轮状病毒数输出 Sample Input 3 Sample Output 16 HINT Source 基尔霍夫矩阵总算编出来了,这道题考

高精度整数 - a+b(王道)

题目描述: 实现一个加法器,使其能够输出a+b的值. 输入: 输入包括两个数a和b,其中a和b的位数不超过1000位. 输出: 可能有多组测试数据,对于每组数据,输出a+b的值 样例输入: 2 6 1000000000000000000000 10000000000000000000000000000000000000000000 样例输出: 8 100000000000000000000000000000000000000000000 #include <iostream> #include