浅谈进制思想:

日常生活中我们习惯用十进制去运算;
为了方便电脑识别开发出了二进制,又因为2^3=8 , 2^4=16,因此应运而生了八进制与16进制。
世上本没有路,走的人多了,也便成了路,那么既然二进制可以衍生出8,16进制,为什么十进制不可以呢。
因此聪明的人们开发出了万进制,也就是10^4=10000 模仿二进制与十六进制的运算。渐渐的,我们发现万进制在进行大数运算方面有着无可比拟的优势。
如:662343889 * 5 = 3311719445
那么如果用万进制计算:可以设一个数组a[3]; a[2] = 3889 ; a[1] = 6234 ; a[0] = 6 ;
第一步:a[2] * 5 = 19445 ; 19445 %10000 = 1余9445 9445留下,1进位;
第二步:a[1] * 5 = 31170 ; 31170 %10000 = 3余1170 1170留下,加上进位的1为1171(终值),3进位;
第三步:a[0] * 5 = 30 ; 30+3(进位)为终值。
按顺序输出得:3311719945 ;仅仅三步我们便得出了最后结果,如果用十进制呢?每位相加,对于本例,至少要十步吧。效率快了3倍不止。

注意点:

本题 严格 模拟手算。(见11行-19行代码)
1、本题用万能头文件代替#include<iostream>#include<iomanip>
传送门→万能头文件
2、万进制逢万进一,效率极高,日后做ACM也是非常优秀的代码。
3、用cin输入char型数组,a[strlen(a)]的值为空, 一定要补0!见第九行代码。(笔者被坑的很惨)
4、最后输出时,第一要过滤值为0的数,第二要过滤第一个值不为0的数。(见21-28行代码)
如:0000 0123 2345 。 这个数的0000不能输出。且0123要变为123
5、26行的作用是:让形如:1234   567 2345 的数,变为:1234 0567 2345

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {char a1[100], a2[100]; memset(a1,'0',sizeof(a1)); memset(a2,'0',sizeof(a2));int b1[25]; memset(b1, 0, sizeof(b1));          //int型长度是char型的四分之一cin >> a1 >> a2;reverse(a1,a1+strlen(a1));  reverse(a2,a2+strlen(a2));     //这里要反转两次reverse(a1,a1+100);   reverse(a2,a2+100);a1[strlen(a1)] = '0';  a2[strlen(a2)] = '0';  //这里需要置0,否则是空。int places = 0, carry;for(int i = 99; i >= 0; i -= 4) {carry = 0;b1[places] += ((a1[i-3]-'0')*1000+(a1[i-2]-'0')*100+(a1[i-1]-'0')*10+(a1[i]-'0')+(a2[i-3]-'0')*1000+(a2[i-2]-'0')*100+(a2[i-1]-'0')*10+(a2[i]-'0'));carry = b1[places]/10000;b1[places]%=10000; places++;                        //下一位 if(carry > 0) b1[places]++;  //进位 }bool flag1 = false, flag2 = false;for(int i = places; i >= 0; i--) {if(!flag1 && b1[i] == 0) continue;   //忽略前导0 else {flag1 = !flag1; if(!flag2) { flag2 = !flag2; cout << b1[i]; }  else cout << setw(4) << setfill('0') << b1[i];     //填充0}}return 0;
}

高效万进制——蓝桥杯|HDOJ 1002 大数加法——30行代码AC相关推荐

  1. 万进制——蓝桥杯|ACM 大数阶乘——21行代码AC

    浅谈进制思想: 日常生活中我们习惯用十进制去运算: 为了方便电脑识别开发出了二进制,又因为2^3=8 , 2^4=16,因此应运而生了八进制与16进制. 世上本没有路,走的人多了,也便成了路,那么既然 ...

  2. 大数系列三——斐波那契数列——高效万进制,亿进制

    浅谈万进制思想: 日常生活中我们习惯用十进制去运算: 为了方便电脑识别开发出了二进制,又因为2^3=8 , 2^4=16,因此应运而生了八进制与16进制. 世上本没有路,走的人多了,也便成了路,那么既 ...

  3. 解题报告——蓝桥 试题 基础练习 矩阵乘法——27行代码AC

    储备知识: 矩阵: 矩阵的乘法: 也就是说,结果矩阵第m行与第n列交叉位置的那个值,等于第一个矩阵第m行与第二个矩阵第n列,对应位置的每个值的乘积之和. 矩阵的n次幂同理.不过是自己乘自己. 本题注意 ...

  4. 浅谈万进制算法与大数定理的结合(高精度乘除法,阶乘)

    我们经常用的进制就是2进制.8进制.10进制和16进制.何来"万进制"?世上本无,有人喊了也就有了.呵呵 现在来谈谈自己对进制的一点不成熟的想法.计算机能"识别" ...

  5. UVA495 Fibonacci Freeze【大数+万进制】

    The Fibonacci numbers (0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...) are defined by the recurrence: F0 = ...

  6. HDU1042 n!【大数+万进制】

    N! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Subm ...

  7. 【C语言数据结构与算法的应用4】巨大数----加减乘运算(万进制和Mec补码的应用)

    巨大数 什么是巨大数 目的 巨大数的加法 巨大数的存储 万进制 微易码补码 巨大数的减法 巨大数的乘法 总结 什么是巨大数 巨大数其实就是有效数字位很大,可表示数的大小超过了int 的表示范围:[-2 ...

  8. 1000的阶乘-HDU 1042-大数阶乘(万进制思想)

    思路: 即用数组a,数组中的每个元素存储4位数,, 比如,计算9的阶乘,在计算到7的阶乘时,7!为5040,可以用a[0]存储5040,没有产生进位,然后8!=5040*8=40320,如果看成万进制 ...

  9. 蓝桥杯 并查集汇总学习 及其代码

    蓝桥杯 并查集汇总学习 及其代码 这里记录一下在刷蓝桥杯的并查集的题时写的一些代码 蓝桥幼儿园 蓝桥幼儿园 :https://www.lanqiao.cn/problems/1135/learning ...

最新文章

  1. 6个你必须知道的机器学习的革命性的教训
  2. SQL SERVER 存储过程学习笔记 (转)
  3. MySQL主从同步机制及同步中的问题处理
  4. 【数据分析】数据分析基础:SQL重要知识点梳理!
  5. java属性监听_Java event事件监听属性值变化 demo
  6. Mac平台上的一个MarkDown编辑器和静态博客生成工具-mweb mac最新版下载
  7. u-boot环境的擦除,默认设置,批写入
  8. 提示缺少msvcpNNN.dll怎么办
  9. Activiti Cloud 开始
  10. matlab使用xlsread报错,matlab的IO操作复习
  11. js判断页面第一次加载或者是否执行了刷新操作
  12. CSS —— 选择器
  13. 汇编语言 查看存储器中的数据
  14. pacman / yaourt 命令
  15. H-divergence
  16. 《iOS Drawing Practical UIKit Solutions》读书笔记(三) —— Drawing Images
  17. 计算机网络之五层体系结构
  18. 南京2级计算机成绩查询,南京审计大学教务管理系统登录入口、成绩查询网上选课查分...
  19. 6.进程通信 无名管道 有名管道
  20. JIT - 即时编译

热门文章

  1. Java 的这 100 个坑,我发誓不会再踩了
  2. 北京冬奥黑科技; 揭秘虎年春晚硬核科技;全球首款AR隐形眼镜问世;索尼3D显示技术路径曝光...
  3. Netflix:通过可视化和统计学改进用户QoE
  4. FFMPEG结构体分析
  5. TensorLayer MNIST
  6. android jni开发方式
  7. 解决scala_spark本地读取csv中文乱码问题
  8. Spark _29_SparkStreaming初始
  9. 基于Kafka+Flink+Redis的电商大屏实时计算案例
  10. 分布式文件系统之Tfs是什么?