【基础代码】高精{加.减.乘.除}
来源:互联网 发布:侠客风云传 mac 编辑:程序博客网 时间:2024/05/01 01:32
写了一下午的高精度,终于OK了...
===========================
加法
-----------------
var a,b,c:array[1..100000]of longint; a_s,b_s,c_s:longint;procedure init;begin assign(input,'jiafa.in'); assign(output,'jiafa.out'); reset(input); rewrite(output);end;procedure terminate;begin close(input); close(output); halt;end;function max(a,b:longint):longint;begin if a>b then exit(a); exit(b);end;procedure main;var i:longint; st_a,st_b:ansistring;begin fillchar(a,sizeof(a),0); fillchar(b,sizeof(b),0); fillchar(c,sizeof(c),0); readln(st_a); readln(st_b); a_s:=length(st_a); b_s:=length(st_b); for i:=1 to a_s do a[i]:=ord(st_a[a_s+1-i])-ord('0'); for i:=1 to b_s do b[i]:=ord(st_b[b_s+1-i])-ord('0'); c_s:=max(a_s,b_s); for i:=1 to c_s do begin c[i+1]:=(a[i]+b[i]+c[i]) div 10; c[i]:=(a[i]+b[i]+c[i]) mod 10; end; inc(c_s); if c[c_s]=0 then dec(c_s); //判断最高位是否为0 for i:=c_s downto 1 do write(c[i]);end;begin init; main; terminate;end.
==========================
减法
-----------------
var a,b,c:array[1..1000000]of longint; a_s,b_s,c_s:longint;procedure init;begin assign(input,'jianfa.in'); assign(output,'jianfa.out'); reset(input); rewrite(output);end;procedure terminate;begin close(input); close(output); halt;end;function max(a,b:longint):longint;begin if a>b then exit(a); exit(b);end;procedure main;var i:longint; st_a,st_b:ansistring;begin fillchar(a,sizeof(a),0); fillchar(b,sizeof(b),0); fillchar(c,sizeof(c),0); readln(st_a); readln(st_b); a_s:=length(st_a); b_s:=length(st_b); c_s:=max(a_s,b_s); for i:=1 to a_s do a[i]:=ord(st_a[a_s+1-i])-ord('0'); for i:=1 to b_s do b[i]:=ord(st_b[b_s+1-i])-ord('0'); for i:=1 to c_s do begin c[i]:=a[i]-b[i]; if c[i]<0 then begin dec(a[i+1]); inc(c[i],10) end; //若当前位减后小于0则... end; while (c[c_s]=0)and(c_s>=1) do dec(c_s);//注意了 //寻找最高位.{找到第一个不为0的} for i:=c_s downto 1 do write(c[i]);end;begin init; main; terminate;end.
=====================
高精乘高精
----------------
var a,b,c:array[1..1000000]of longint; a_s,b_s,c_s:longint;procedure init;begin assign(input,'chengfa.in'); assign(output,'chengfa.out'); reset(input); rewrite(output);end;procedure terminate;begin close(input); close(output); halt;end;function max(a,b:longint):longint;begin if a>b then exit(a); exit(b);end;procedure main;var i,j:longint; st_a,st_b:ansistring;begin readln(st_a); readln(st_b); a_s:=length(st_a); b_s:=length(st_b); c_s:=max(a_s,b_s); for i:=1 to a_s do a[i]:=ord(st_a[a_s+1-i])-ord('0'); for i:=1 to b_s do b[i]:=ord(st_b[b_s+1-i])-ord('0'); for i:=1 to a_s do //因子2 for j:=1 to b_s do //因子1 c[i+j-1]:=c[i+j-1]+a[i]*b[j]; i:=1; while (c[i]<>0)or(i<=c_s) do begin c[i+1]:=c[i+1]+c[i] div 10; c[i]:=c[i] mod 10; inc(i); end; c_s:=i-1; //更新积的长度.. for i:=c_s downto 1 do write(c[i]);end;begin init; main; terminate;end.
=====================
高精除高精
-------------------
var a,b,c,d,f:array[1..100000]of longint; st_a,st_b:ansistring; a_s,b_s,c_s,d_s,f_s:longint;procedure init;begin assign(input,'chufa.in'); assign(output,'chufa.out'); reset(input); rewrite(output);end;procedure terminate;begin close(input); close(output); halt;end;procedure chengfa;var i:longint;begin for i:=d_S downto 1 do d[i+1]:=d[i]; inc(d_S); if d[d_s]=0 then dec(d_s); //这里要注意end;function compare:boolean; //d/bvar i:longint;begin compare:=false; if d_s>b_s then exit(true) else begin if d_s=b_s then begin i:=b_s; while (i>0)and(d[i]=b[i]) do dec(i); if i=0 then exit(true) else begin if d[i]>=b[i] then exit(true) else exit(false); end; end; end;end;procedure jianfa; // d-b;var i:longint;begin fillchar(f,sizeof(f),0); for i:=1 to d_s do begin f[i]:=d[i]-b[i]; if f[i]<0 then begin inc(f[i],10); dec(d[i+1]); end; end; f_S:=d_s; while f[f_s]=0 do dec(f_s); d_s:=f_s; d:=f;end;procedure main;var i:longint;begin readln(st_a); readln(st_b); a_s:=length(st_a); b_s:=length(st_b); for i:=1 to a_s do a[i]:=ord(st_a[a_s+1-i])-48; for i:=1 to b_s do b[i]:=ord(st_b[b_s+1-i])-48; fillchar(c,sizeof(c),0); //记录商 fillchar(d,sizeof(d),0); d_s:=1; for i:=a_s downto 1 do begin //上一步余数*10 chengfa; d[1]:=a[i]; while compare do begin jianfa; inc(c[i]); end; end; c_s:=a_s; while (c_s>1) and (c[c_s]=0) do dec(c_s); for i:=c_s downto 1 do write(c[i]);end;begin init; main; terminate;end.
- 【基础代码】高精{加.减.乘.除}
- 大数 加 减 乘 除
- Linux 加,减,乘,除
- 复数类的加,减,乘,除
- 模拟笔算 (加 减 乘 除)
- 数的加 减 乘 除
- 浮点数加,减,乘,除运算
- 使用BigDecimal进行加、减、乘、除
- 加、减、乘、除(四则运算)
- java实现大数加、减、乘、除
- BigDecimal的加 减 乘 除
- BigDecimal的加、减、乘、除
- BigDecimal 加,减,乘,除 详解
- 简单计算器 (加 减 乘 除 清零)
- 高精度 加、减、乘、除 模板
- 关于一次性处理一串基本 加、减、乘、除 运算 的代码
- 高精度代码(PSACAL)加·减·乘·除(高精度 div 2)
- 高精度加,减,乘,除,取模,模板
- Spring + BlazeDS RC1集成指南
- Assert API
- shell中的test测试命令
- 关于挂载NFS出现nfs:server is not responding,still trying的问题
- 实现一个可host asp.net程序的小型IIS(Cassinidev介绍)
- 【基础代码】高精{加.减.乘.除}
- C#编程人员需要熟知的windows窗体上的控件
- 用Java技术创建RESTful Web服务
- document.evaluate的详细用法--使用XPath查找某些节点对象[z]
- Tomcat 连接池 数据源配置
- VMware使用 NET 模式联网 配置 linux 固定 IP
- DecimalFormat和BigDecimal对格式化的性能对比
- java-二叉树排序
- 形界面程序Qt安装及其在2410-s上的移植