高精度计算(加减乘)

合集下载

高精度

高精度

• f(3)=2;
{
• f(4)=3;
f3=f1+f2;
• f(5)=5; • f(6)=8;
F(i)=f(i-2)+f(i-1)
f1=f2; f2=f3; }
printf("%ld\n",f3);
• 一、n数求和(problem.c)
• 【问题描述】

有n个数,计算这n个数的和。
• 【输入文件】
• 【问题描述】
• 学习程序我们都要从基础学起,在解决简单的数学问题中学会使用程序,学 会程序的基本的语法和基本的算法。今天我们练习一个简单数学运算——求两 个正整数的和。
• 【输入文件】

文件名:sum.in

文件中有两个正整数,已知这个数字不超过1000000000000000000。
• 【输出文件】
• 加法运算 • 减法运算 • 乘法运算 • 除法运算
高精度除以单精度 ★高精度除以高精度
高精度运算涉及到的主要操作: • 数据的输入和存储
• 数据的运算
加、减、乘、除运算 加法和乘法的进位 减法的借位和符号确定 除法商和余数的处理
• 数据的输出
加法
A+B problem
• 输入两个整数a和b • 计算a+b的值 • 样例输入: 10 20 • 样例输出: 30
1234567891011+17161514 13121110987654321=????
1237 __+____4__7_6____ ____1__6__10__13___
17 1 3
我们该怎么来表示一个几百位数的数呢?
一般变量表示
×
字符串表示

高精度计算

高精度计算

高精度计算由于计算机具有运算速度快,计算精度高的特点,许多过去由人来完成的烦琐、复杂的数学计算,现在都可以由计算机来代替。

计算机计算结果的精度,通常要受到计算机硬件环境的限制。

例如,pascal 要计算的数字超过19位,计算机将按浮点形式输出;另一方面,计算机又有数的表示范围的限制,在一般的微型计算机上,实数的表示范围为l0-38 -l038。

例如,在计算N!时,当N=21时计算结果就超过了这个范围,无法计算了。

这是由计算机的硬件性质决定的,但是,我们可以通过程序设计的方法进行高精度计算(多位数计算)。

学习重点1、掌握高精度加、减、乘、除法。

3、理解高精度除法运算中被除数、除数、商和余数之间的关系。

4、能编写相应的程序,解决生活中高精度问题。

学习过程一、高精度计算的基本方法用free pascal程序进行高精度计算,首先要处理好以下几个基本问题:【数据的输入与保存】(1)一般采用字符串变量存储数据,然后用length函数测量字符串长度确定其位数。

(2)分离各位数位上的数字分离各数位上的数通常采用正向存储的方法。

以“163848192”为例,见下表:A[9] A[8] A[7] A[6] A[5] A[4] A[3] A[2] A[1]1 6 3 8 4 8 1 9 2基本原理是A[1]存放个位上的数字,A[2]存放十位上的数字,……依此类推。

即下标小的元素存低位上的数字,下标大的元素存高位上的数字,这叫“下标与位权一致”原则。

【计算结果位数的确定】(1)高精度加法:和的位数为两个加数中较大数的位数+1。

(2)高精度减法:差的位数为被减数和减数中较大数的位数。

(3)高精度乘法:积的位数为两个相乘的数的位数之和。

(4)高精度除法:商的位数按题目的要求确定。

【计算顺序与结果的输出】高精度加、减、乘法,都是从低位到高位算起,而除法相反。

输出结果都是从高位到低位的顺序,注意:高位上的零不输出(整数部分是零除外)。

高精度加减乘除算法

高精度加减乘除算法

⾼精度加减乘除算法⾼精度运算所谓的⾼精度运算,是指参与运算的数(加数,减数,因⼦……)范围⼤⼤超出了标准数据类型(整型,实型)能表⽰的范围的运算。

例如,求两个200位的数的和。

这时,就要⽤到⾼精度算法了。

在这⾥,我们先讨论⾼精度加法。

⾼精度运算主要解决以下三个问题:基本⽅法1、加数、减数、运算结果的输⼊和存储运算因⼦超出了整型、实型能表⽰的范围,肯定不能直接⽤⼀个数的形式来表⽰。

在Pascal中,能表⽰多个数的数据类型有两种:数组和字符串。

(1)数组:每个数组元素存储1位(在优化时,这⾥是⼀个重点!),有多少位就需要多少个数组元素;⽤数组表⽰数的优点:每⼀位都是数的形式,可以直接加减;运算时⾮常⽅便⽤数组表⽰数的缺点:数组不能直接输⼊;输⼊时每两位数之间必须有分隔符,不符合数值的输⼊习惯;(2)字符串:字符串的最⼤长度是255,可以表⽰255位。

⽤字符串表⽰数的优点:能直接输⼊输出,输⼊时,每两位数之间不必分隔符,符合数值的输⼊习惯;⽤字符串表⽰数的缺点:字符串中的每⼀位是⼀个字符,不能直接进⾏运算,必须先将它转化为数值再进⾏运算;运算时⾮常不⽅便;(3)因此,综合以上所述,对上⾯两种数据结构取长补短:⽤字符串读⼊数据,⽤数组存储数据:var s1,s2:string;a,b,c:array [1..260] of integer;i,l,k1,k2:integer;beginwrite('input s1:');readln(s1);write('input s2:');readln(s2);{————读⼊两个数s1,s2,都是字符串类型}l:=length(s1);{求出s1的长度,也即s1的位数;有关字符串的知识。

}k1:=260;for i:=l downto 1 dobegina[k1]:=ord(s1)-48;{将字符转成数值}k1:=k1-1;end;k1:=k1+1;{————以上将s1中的字符⼀位⼀位地转成数值并存在数组a中;低位在后(从第260位开始),⾼位在前(每存完⼀位,k1减1)}对s2的转化过程和上⾯⼀模⼀样。

高精度算法大全

高精度算法大全

高精度算法大全在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字.一般这类数字我们统称为高精度数,高精度算法是用计算机对于超大数据的一种模拟加,减,乘,除,乘方,阶乘,开放等运算.譬如一个很大的数字N >= 10^ 100, 很显然这样的数字无法在计算机中正常存储.于是, 我们想到了办法,将这个数字拆开,拆成一位一位的或者是四位四位的存储到一个数组中, 用一个数组去表示一个数字.这样这个数字就被称谓是高精度数.对于高精度数,也要像平常数一样做加减乘除以及乘方的运算,于是就有了高精度算法:由于计算机输入计算结果的精度通常受到计算机的限制,如:在双精度方式下,计算机最多只能输出16位有效数字,如果超过16位,则只能按浮点形式输出,另外,一般计算机实数表示的范围为1038,如果超过这个范围,计算机就无法表示了。

但是我们可以通过一些简单的办法来解决这个问题。

这就是我们要说的高精度计算机。

一、基本方法:在计算机上进行高精度计算,首先要处理好以下几个基本问题:1、数据的接收与存储;2、计算结果位数的确定;3、进位处理和借位处理;4、商和余数的求法;下面我们逐一介绍一下这几个问题的解决方法。

1、数据的接收与存储:要在计算机上进行高精度计算,首先就应该有精确的输入,即计算机要精确地接收和存储数据。

通常:①、当输入的数值在计算机允许的范围内时,可以用数值型变量来接收数据。

②、当输入的数据超过计算机允许显示的精度范围时,采用字符来接收数据。

③、分离各位数字。

接收数据子模块(字符型变量接收数据):prucedure readdata(var in:array[1..100] of integer);var ch:char;i,k:integer;beginread(ch);k:=0;while ch in['0'..'9'] do begininc(k);int[k]:=ord(ch)-48;read(ch);end;end;2、计算结果位数的确定①、两数之和的位数最大为较大的数的位数加1。

高精度计算(加减乘)

高精度计算(加减乘)

//在c[0]放入,a[0]和b[0]的最大值,和的最少位数 if(a[0]>b[0])
c[0]=a[0]; else
c[0]=b[0]; //按位加法 for(int i=1;i<=c[0];i++){
c[i]=(a[i]+b[i]+jw)%10; jw=(a[i]+b[i]+jw)/10; } if(jw>0){ c[0]++; c[c[0]]=jw; } //输出答案 for(int i=c[0];i>=1;i--) { cout<<c[i]; } return 0; }
if(c[i]>0)break; else c[0]--; } if(c[0]==0) c[0]=1; //答案为0 //输出答案 for(int i=c[0];i>=1;i--) cout<<c[i]; return 0; }
3 高精度乘以低精度
a[3] a[2]/b[2] a[1]/b[1]
a[i]
2 大整数减法
#include<iostream> #include<string> using namespace std; string s1,s2,t; int a[100],b[100],c[100]; bool flag; int main(){
cin>>s1;cin>>s2; //预处理 if(s2.size()>s1.size())flag=true; if(s2.size()==s1.size() &&s2>s1)flag=true; if(flag==true){

c++的正整数高精度加减乘除

c++的正整数高精度加减乘除

c++的正整数⾼精度加减乘除数值计算之⾼精度加减乘除⼀.⾼精度正整数的⾼精度计算1.加法2.减法减法和加法的最⼤区别在于:减法是从⾼位开始相减,⽽加法是从低位开始相加3.乘法:⽤⾼精度加法实现l 乘法的主要思想是把乘法转化为加法进⾏运算。

请先看下⾯的等式:12345*4=12345+12345+12345+1234512345*20=123450*212345*24=12345*20+12345*4l 等式(1)说明,多位数乘⼀位数,可以直接使⽤加法完成。

l 等式(2)说明,多位数乘形如d*10n的数,可以转换成多位数乘⼀位数来处理。

l 等式(3)说明,多位数乘多位数,可以转换为若⼲个“多位数乘形如d*10n的数与多位数乘⼀位数”之和。

l 因此,多位数乘多位数最终可以全部⽤加法来实现。

4.除法:⽤⾼精度减法实现⼆.注意清零和对位操作三. 代码1//2// main.cpp3// 正整数⾼精度运算4//5// Created by ashley on 14-11-9.6// Copyright (c) 2014年 ashley. All rights reserved.7//89 #include <iostream>10 #include <string>11using namespace std;1213string clearZeros(string data)14 {15if (data[0] == '0') {16int key = (int) data.length() - 1;17for (int i = 0; i < data.length(); i++) {18if (data[i] != '0') {19 key = i;20break;21 }22 }23 data.erase(0, key);24 }25if (data == "") {26 data = "0";27 }28return data;29 }3031//对位操作32void countPoint(string &operand1, string &operand2)33 {34while (operand1.length() < operand2.length()) {35 operand1 = "0" + operand1;36 }37while (operand1.length() > operand2.length()) {38 operand2 = "0" + operand2;39 }40 }4142//判断⼤⼩43bool bigger(string operand1, string operand2)44 {45return operand1 >= operand2;46 }4748string addition(string addent, string adder)49 {50//先对位,在加数和被加数前⾯适当补0,使他们包含相同的位数51 countPoint(addent, adder);52//前⾯再补⼀个0,确定和的最多位数53 addent = "0" + addent;54 adder = "0" + adder;55//从低位开始,对应位相加,结果写进被加数中,如果有进位,直接给被加数前⼀位加1 56for (int i = (int) addent.length() - 1; i > 0; i--) {57 addent[i] = addent[i] + adder[i] - 48;58if (addent[i] > '9') {59 addent[i] = addent[i] - 10;60 addent[i - 1] = addent[i - 1] + 1;61 }62 }63return clearZeros(addent);64 }6566string subtraction(string subtrahend, string subtractor)67 {68//先对位,在减数和被减数前⾯适当补0,使他们包含相同的位数69 countPoint(subtrahend, subtractor);70//判断被减数和减数谁⼤,保证被减数⼤于减数71if (bigger(subtrahend, subtractor)) {72 subtrahend[0] = subtrahend[0] - subtractor[0] + 48;73for (int i = 1; i < (int)subtrahend.length(); i++) {74if (subtrahend[i] >= subtractor[i]) {75 subtrahend[i] = subtrahend[i] - subtractor[i] + 48;76 } else {77 subtrahend[i] = subtrahend[i] - subtractor[i] + 10 + 48;78 subtrahend[i - 1]--;79 }80 }81 } else {82 subtrahend = '-' + subtraction(subtractor, subtrahend);83 }84return subtrahend;85 }8687string multiplication(string multiplicand, string multiplier)88 {89string result = "0";90for (int i = (int)multiplier.length() - 1; i >= 0 ; i--) {91for (char c = '1'; c <= multiplier[i]; c++) {92 result = addition(result, multiplicand);93 }94 multiplicand = multiplicand + "0";95 }96return clearZeros(result);97 }9899// 试商法100string division(string dividend, string divisor)101 {102// 存放商103string result;104// 存放余数105string remains;106for (int i = 0; i < (int)dividend.length(); i++) {107 remains = remains + dividend[i];108 result = result + "0";109// 从1往上试110while (bigger(remains, result)) {111 cout << result << "-----------" << remains << endl;112 result[result.length() - 1]++;113 remains = subtraction(remains, divisor);114 }115 }116return clearZeros(result);117 }118int main(int argc, const char * argv[])119 {120string a, b;121int tests;122 cin >> tests;123while (tests--) {124 cin >> a >> b;125//正整数⾼精度加法,从低位开始126//cout << addition(a, b) << endl;127//正整数⾼精度减法,从⾼位开始128//cout << subtraction(a, b) << endl;129//正整数⾼精度乘法,将乘法转换为加法进⾏运算130//cout << multiplication(a, b) << endl;131 cout << division(a, b) << endl;132//正整数⾼精度除法133134 }135return0;136 }。

高精度加减乘除 浮点型

高精度加减乘除 浮点型

高精度加减乘除浮点型
高精度加减乘除是指针对浮点数进行精确计算,避免由于浮点
数运算的精度问题而导致的计算结果不准确的情况。

在进行高精度
加减乘除浮点型计算时,需要考虑以下几个方面:
1. 精度损失,浮点数在计算机中以二进制形式表示,有时会出
现精度损失,导致计算结果不准确。

为避免这种情况,可以使用高
精度计算库,如Python中的decimal模块或者其他高精度计算库,
来进行精确计算。

2. 舍入误差,在浮点数计算过程中,舍入误差是不可避免的,
特别是在连续的加减乘除运算中。

为了减小舍入误差,可以采用四
舍五入、向上取整或向下取整等方法来处理计算结果。

3. 数值范围,浮点数的表示范围是有限的,超出范围的计算会
导致溢出或下溢。

在进行高精度计算时,需要注意数值范围的限制,避免出现计算结果超出浮点数表示范围的情况。

4. 性能考虑,高精度计算通常会牺牲一定的计算性能,因为需
要进行更复杂的运算和更多的内存存储。

在实际应用中,需要权衡
计算精度和性能之间的关系,选择合适的计算方法。

总之,高精度加减乘除浮点型计算需要综合考虑精度损失、舍入误差、数值范围和性能等多个方面的因素,以确保计算结果的准确性和可靠性。

在实际应用中,需要根据具体的计算需求选择合适的高精度计算方法和工具。

高精度计算(二)

高精度计算(二)

高精度计算(二)【例3】高精度乘法。

从键盘读入两个正整数,求它们的积。

分析:(1)、乘法运算a←a*c(a为高精度类型,c为字节型)按照乘法规则,从a的第l位开始逐位与c相乘。

在第i位乘法运算中(1≤i≤la),a的i位与c的乘积必须加上i-1位的进位(i-1位的乘积除以10的整商),然后规整积的i-l位(取i-1位的乘积对10的余数)。

procedure multiply(var a:numtype; c:byte);vari:byte;begina[1] ←a[l]*c;{第1位初始化}for i←2 to la do {逐位相乘}begina[i] ←a[i]*c;a[i] ←a[i]+a[i-l] div 10;a[i-1] ←a[i-l] mod 10end:{for}while a[1a]>=10 do {积的最高位进位}beginla←la+1;a[la] ←a[la-1] div 10;a[la-1] ←a[la-1]mod 10;end; {while}end;{multiply}(2)、乘法运算c←a*b(a,b为高精度类型,)类似加法,可以用竖式求乘法。

在做乘法运算时,同样也有进位,同时对每一位进乘法运算时,必须进行错位相加,如图3, 图4。

分析C 数组下标的变化规律,可以写出如下关系式:C i= C 'i +C ''i +…由此可见,C i跟A[i]*B[j]乘积有关,跟上次的进位有关,还跟原C i的值有关,分析下标规律,有x:= A[i]*B[j]+ x DIV 10+ C[i+j-1];C[i+j-1] := x mod 10;类似,高精度乘法的参考程序:program exam3;constmax=200;vara,b,c:array[1..max] of 0..9;n1,n2:string;lena,lenb,lenc,i,j,x:integer;beginwrite(’Input multiplier:’); readln(n1);write(’Input multiplicand:’); readln(n2);lena:=length(n1); lenb:=length(n2);for i:=1 to lena do a[lena-i+1]:=ord(n1[i])-ord(’0’);for i:=1 to lenb do b[lenb-i+1]:=ord(n2[i])-ord(’0’);for i:=1 to lena do beginx:=0;for j:=1 to lenb do begin {对乘数的每一位进行处理}x := a[i]*b[j] + x div 10 + c[i+j-1]; {当前乘积+上次乘积进位+原数}c[i+j-1] := x mod 10;end;c[i+j]:= x div 10; {进位}end;lenc:=i+j;while (c[lenc]=0) and (lenc>1) do dec(lenc);for i:=lenc downto 1 do write(c[i]);writelnend.【例4】高精度除法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

高精度乘高精度
× 4 1 7 2 1 8 5 2 2 8 1 2 4 0 6 5 0 0
C[5] C[4] C[3] C[2]
856 × 25 856 × 25 856 × 25 a×b[1] 856 × 25 856 × 25 856 × 25 a×b[2]
C[1] 0+0+6× 5 0 0 0 0 0 0
A3 A2 × B2 C'4 C'3 C'2 C"4 C"3 C"2 C4 C3 C2
A1 B1 C'1 C1

我们在计算高精度乘法结果时,通常先计算C'i,再加上C"i,再加上C'"i,…… Ci跟a[i]*b[j]乘积有关,跟上次的进位有关,还跟原Ci的值有关,分析下标规 律,有:
c[i+j-1]=a[i]*b[j]+x+c[i+j-1]; x=c[i+j-1]/10; c[i+j-1]%=10;
//b逐位乘数组a for (int i=1;i<=b[0];i++) { for (int j=1;j<=a[0];j++)//a逐位乘以b[i] { c[i+j-1பைடு நூலகம்=c[i+j-1]+jw+b[i]*a[j]; //数组c对应位加上进位及a、b对应位乘积 jw=c[i+j-1]/10; //处理进位 c[i+j-1]%=10; } c[i+a[0]]=jw; //a乘以b[i]后的最高位进位 } c[0]=a[0]+b[0]; while (c[0]>1&&c[c[0]]==0) c[0]--; //更新c的位数 for (int i=c[0];i>0;i--) cout<<c[i]; return 0;
else
c[i]=a[i]-b[i]; } //除去多余的0 for(int i=c[0];i>=1;i--){ if(c[i]>0)break; else c[0]--; } if(c[0]==0) c[0]=1; //答案为0 //输出答案 for(int i=c[0];i>=1;i--) cout<<c[i]; return 0; }
3 高精度乘以低精度
a[3] a[2]/b[2] a[1]/b[1]
4 5 2 3 × ———————————— a[i]×b c[3] c[2] c[1] 69 92 115 103 69 5 ———————————————— 79 3 5
a[i] b
3
3 高精度乘以低精度
#include<iostream> #include<cstdio> using namespace std; string s1; int a[100],b,c[100]; int main(){ cin>>s1; cin>>b; a[0]=s1.size(); //把个位放入a[1],把十位放入a[2],把百位放入a[3] for(int i=a[0]-1;i>=0;i--){ int j=a[0]-i; a[j]=s1[i]-’0’; } //被除数位数为最终位数 c[0]=a[0]; //按位计算 for(int i=1;i<=c[0];i++) c[i]=a[i]*b;
几个需要考虑的问题: 1、如何存储大整数?
a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
数组
6 6 8 3 6 2 2 0 1 3
2、如何实现加法? 逐位相加 3、如何处理进位? 向数组的高位进位
+
1 1
4 5 0 9 6 3 8 7 6 7
10 11 1 8 9 12 12 5 10 3 2 6 0 7 7 7 8 10 0
2 大整数减法
#include<iostream> #include<string> using namespace std; string s1,s2,t; int a[100],b[100],c[100]; bool flag; int main(){ cin>>s1;cin>>s2; //预处理 if(s2.size()>s1.size())flag=true; if(s2.size()==s1.size() &&s2>s1)flag=true; if(flag==true){ cout<<‘-’; t=s1; s1=s2; s2=t; }
高精度计算
C/C++中的int类型能表示的范围一般是-231-231 – 1。 unsigned 类型能表示的范围是 0 -232 – 1,即 0 - 4294967295。所以,int和unsigned类型变量,都不能保存 超过10位的整数。
如果有一个长度为100位的大整数,我们如何存储?
我们如何进行大整数的运算?比如如何计算两个100位整 数的和?

类似加法,可以用竖式求乘法。在做乘法运算时,同样也有进位,同时对每 一位进行乘法运算时,必须进行错位相加
× 4 1 7 2 1

8 5 2 2 8 1 2 4 0
6 5 0 0 C6 C"5 C5
分析c数组下标的变化规律,可以写出如下关系式:
Ci = C'i + C"i + ……,其中: C'i由A1*B1、A2*B1、A3*B1、…… 组成 C"i由A1*B2、A2*B2、A3*B2、…… 组成 ……
参考程序: #include<iostream> #include<string> using namespace std; string s1,s2; int a[100],b[100],c[100],jw; int main(){ cin>>s1; cin>>s2; //把s1的长度,放入到a[0]; a[0]=s1.size(); //把个位放入a[1],把十位放入a[2],把百位放入a[3] for(int i=a[0]-1;i>=0;i--){ int j=a[0]-i; a[j]=s1[i]-’0’; } //把s2的长度,放入到b[0]; b[0]=s2.size(); //把个位放入b[1],把十位放入b[2],把百位放入b[3] for(int i=b[0]-1;i>=0;i--){ int j=b[0]-i; b[j]=s2[i]-’0’; }
1 大整数加法
问题描述 求两个不超过100位的非负整数的和。
输入数据 有两行,每行是一个不超过100位的非负整数,没有多余的前导0。
输出要求 一行,即相加后的结果。结果里不能有多余的前导0,即如果结果 是342,那么就不能输出为0342。
输入样例 22222222222222222222 33333333333333333333 输出样例 Output Sample: 55555555555555555555
//处理进位 ,最高位不处理 for(int i=1;i<c[0];i++) if(c[i]>=10) { c[i+1]+=c[i]/10; c[i]=c[i]%10; } //输出 for(int i=c[0];i>=1;i--) { cout<<c[i]; } return 0; }
4、高精度乘高精度
//在c[0]放入,a[0]和b[0]的最大值,和的最少位数 if(a[0]>b[0]) c[0]=a[0]; else c[0]=b[0]; //按位加法 for(int i=1;i<=c[0];i++){ c[i]=(a[i]+b[i]+jw)%10; jw=(a[i]+b[i]+jw)/10; } if(jw>0){ c[0]++; c[c[0]]=jw; } //输出答案 for(int i=c[0];i>=1;i--) { cout<<c[i]; } return 0; }
}
0+3+5× 5 0+2+8× 5 2 2 2+2+5× 2 4 8 8 8+0+6× 2 0 0
4 4 4 4+1+8× 2 1
2
4
0
0
a[i]×b[j]对应于c[i+j-1]
#include<iostream> #include<cstdio> #include<string> using namespace std; string s1,s2; int a[100],b[100],c[100],jw; int main(){ cin>>s1>>s2; //a[0]里存入长度,每一位倒序存入a[i] a[0]=s1.size(); for(int i=a[0]-1;i>=0;i--){ int j=a[0]-i; a[j]=s1[i]-'0'; } b[0]=s2.size(); for(int i=b[0]-1;i>=0;i--){ int j=b[0]-i; b[j]=s2[i]-'0'; }
//逆序存入数组 a[0]=s1.size(); for(int i=a[0]-1;i>=0;i--){ int j=a[0]-I; a[j]=s1[i]-’0’; } b[0]=s2.size(); for(int i=b[0]-1;i>=0;i--){ int j=b[0]-I; b[j]=s2[i]-’0’; } //按位减法 c[0]=a[0]; for(int i=1;i<=c[0];i++){ if(a[i]-b[i]<0){ //借位 a[i+1]- -; c[i]=10+a[i]-b[i]; }
相关文档
最新文档