精华内容
下载资源
问答
  • 大数四则运算

    2012-04-21 21:17:24
    c语言编写的关于大数四则运算的程序,便于理解
  • c++ 大数四则运算

    2013-04-06 01:03:12
    c++ 大数四则运算,支持无线大小数字的加减乘除四则四则运算
  • 1 //大数四则运算2 #include 3 #include 4 #include 5 using namespace std;67 classBIGINTEGEROPERATIONS8 {9 private:10 static intCOMPARE(string number1, string number2)11 {12 intj;1314 int ...

    1 //大数的四则运算

    2 #include

    3 #include

    4 #include

    5 using namespace std;6

    7 classBIGINTEGEROPERATIONS8 {9 private:10 static intCOMPARE(string number1, string number2)11 {12 intj;13

    14 int length1 =number1.size();15 int length2 =number2.size();16

    17 if(number1.size() == 0) number1 = "0";18 if(number2.size() == 0) number2 = "0";19

    20 j = 0;21 for(int i = 0; i < length1; ++i)22 {23 if(number1[i] == '0') ++j;24 else break;25 }26 number1 =number1.substr(j);27

    28 j = 0;29 for(int i = 0; i < length2; ++i)30 {31 if(number2[i] == '0') ++j;32 else break;33 }34 number2 =number2.substr(j);35

    36 length1 =number1.size();37 length2 =number2.size();38

    39 if(length1 >length2)40 {41 return 1;42 }43 else if(length1 ==length2)44 {45 if(number1.compare(number2) > 0)46 {47 return 1;48 }49 else if(number1.compare(number2) == 0)50 {51 return 0;52 }53 else

    54 {55 return -1;56 }57 }58 else

    59 {60 return -1;61 }62

    63 return 0;64 }65

    66 public:67 staticstring PLUS(string number1,string number2)68 {69 inti;70 int length1 =number1.size();71 int length2 =number2.size();72

    73 string result="";74

    75 reverse(number1.begin(), number1.end());76 reverse(number2.begin(), number2.end());77

    78 for(i = 0; i < length1 && i < length2; i++)79 {80 char c = (char)(number1[i] + number2[i] - 48);81 result = result +c;82 }83

    84 while(i

    90 while(i

    96 int carry = 0;97 for(i = 0; i < (int)result.size(); ++i)98 {99 int value = result[i] - 48 +carry;100 result[i] = (char)(value % 10 + 48);101 carry = value / 10;102 }103

    104 if(carry !=0)105 {106 result = result + (char)(carry + 48);107 }108

    109 for(i = result.size() - 1; i >= 0; i--)110 {111 if(result[i] != '0') break;112 }113

    114 result = result.substr(0, i + 1);115

    116 reverse(result.begin(), result.end());117 if(result.length() == 0) result = "0";118 returnresult;119 }120

    121

    122 staticstring MINUS(string number1,string number2)123 {124 inti;125 string result = "";126

    127 int length1 =number1.size();128 int length2 =number2.size();129

    130 if(COMPARE(number2,number1) > 0)131 {132 return "-" +MINUS(number2, number1);133 }134

    135 reverse(number1.begin(),number1.end());136 reverse(number2.begin(),number2.end());137

    138 for(i = 0; i < length1 && i < length2; i++)139 {140 char c = number1[i] - number2[i] + 48;141 result = result +c;142 }143

    144 if(i

    152 int carry = 0;153 for(i = 0; i < (int)result.length(); i++)154 {155 int value = result[i] - 48 +carry;156 if(value < 0)157 {158 value = value + 10;159 carry = -1;160 }161 else carry = 0;162 result[i]=(char)(value + 48);163 }164

    165 for(i = result.size() - 1; i >= 0; i--)166 {167 if(result[i] != '0')break;168 }169

    170 result = result.substr(0, i+1);171

    172 reverse(result.begin(), result.end());173 if(result.length()==0) result = "0";174 returnresult;175 }176

    177

    178 staticstring MULTIPLY(string number1, string number2)179 {180 inti, j;181 int *iresult;182 int length1 =number1.size();183 int length2 =number2.size();184 string result = "";185

    186 reverse(number1.begin(), number1.end());187 reverse(number2.begin(), number2.end());188

    189 iresult = (int*)malloc(sizeof(int) * (length1 + length2 + 1));190 memset(iresult, 0, sizeof(int) * (length1 + length2 + 1));191

    192 for(i = 0; i < length1; i++)193 {194 for(j = 0; j < length2; j++)195 {196 iresult[i+j] += ((number1[i] - 48) * (number2[j] - 48));197 }198 }199

    200 int carry = 0;201 for(i = 0; i < length1 + length2; i++)202 {203 int value = iresult[i] +carry;204 iresult[i] = value % 10;205 carry = value / 10;206 }207

    208 for(i = length1 + length2 - 1; i >= 0; i--)209 {210 if(iresult[i] != 0)break;211 }212

    213 for(; i >= 0; i--)214 {215 result = result + (char)(iresult[i]+48);216 }217

    218 free(iresult);219

    220 if(result == "") result = "0";221 returnresult;222 }223

    224

    225 //缺省地,商数向下取整, floatpoint用于指定保留小数点的位数

    226 static string DIVIDE(string number1, string number2, int floatpoint = 0)227 {228 inti, j, pos;229 string result = "";230 string tempstr = "";231 int length1 =number1.size();232 int length2 =number2.size();233

    234 if((COMPARE(number2, number1) > 0) && (floatpoint == 0))235 {236 return "0";237 }238

    239 tempstr = number1.substr(0, length2);240 pos = length2 - 1;241

    242 while(pos = 0)246 {247 quotient++;248 tempstr =MINUS(tempstr, number2);249 }250

    251 result = result + (char)(quotient + 48);252 pos++;253 if(pos

    259 if(floatpoint > 0)260 {261 result += '.';262 string stmp = "1";263 int itmp = 0;264 for(int k = 0; k < floatpoint; ++k)265 {266 stmp += '0';267 if(COMPARE(MULTIPLY(MINUS(number1, MULTIPLY(DIVIDE(number1, number2), number2)), stmp), number2) < 0)268 {269 result += '0';270 ++itmp;271 }272 }273

    274 string temp =DIVIDE(MULTIPLY(MINUS(number1, MULTIPLY(DIVIDE(number1, number2), number2)), stmp), number2);275 if(temp[0] != '0') result +=temp;276 }277

    278 j =result.size();279 for(i = 0; i < j; i++)280 {281 if(result[i] != '0') break;282 }283

    284 result =result.substr(i, j);285

    286 returnresult;287 }288

    289 staticstring MOD(string number1, string number2)290 {291 if(COMPARE(number2, number1) > 0)292 {293 returnnumber1;294 }295 else if(COMPARE(number2, number1) == 0)296 {297 return "0";298 }299 else

    300 {301 returnMINUS(number1, MULTIPLY(DIVIDE(number1, number2), number2));302 }303 }304 };305

    306 int main(int argc, char*argv[])307 {308 string str1 = "9999999999999999999999999999999999999999";309 string str2 = "9998999899989998999899989998999899989998";310

    311 cout << BIGINTEGEROPERATIONS::PLUS(str1, str2) <

    321 return 0;322 }

    展开全文
  • 各种基本操作 1 import java.math.BigInteger;... 18 } 19 } 20 21 } View Code 标签:BigInteger,java,Scanner,大数,四则运算,new,import,public 来源: https://www.cnblogs.com/pangbi/p/13862946.html

    各种基本操作

    8f900a89c6347c561fdf2122f13be562.png

    961ddebeb323a10fe0623af514929fc1.png

    1 import java.math.BigInteger;

    2 import java.util.*;

    3 public class Main{

    4 public static void main(String[] args)

    5 {

    6 Scanner input = new Scanner(System.in);

    7 BigInteger a = input.nextBigInteger();//输入一个大数

    8 BigInteger b = BigInteger.valueOf(0);//初始化一个为0的大数

    9 BigInteger c = BigInteger.valueOf(1);//初始化一个为1的大数

    10 BigInteger []shu = new BigInteger[4040];//初始化一个4040的大数数组

    11 int I = 1234567;

    12 BigInteger d = BigInteger.valueOf(I);//将int转化成BigInt

    13 String s = "1234567";

    14 BigInteger f = new BigInteger(s); //将String转为BigInt

    15 int e = 10010;

    16 a = a.add(b); //a = a+b

    17 a = a.subtract(b); //a = a-b

    18 a = a.divide(b); //a = a/b

    19 a = a.multiply(b); //a = a*b

    20 a = a.mod(b); //a = a%b

    21 if(a.equals(a.max(b)));// if(a>b)

    22 if(b.equals(a.max(b)));// if(a

    23

    24 c = a.pow(e); //a = a^e e必须为int类型

    25 c = a.gcd(b); //a和b的最大公约数

    26

    27 int len = a.toString().length(); //求大数的长度

    28 while(input.hasNext())//一直输入

    29 {

    30 BigInteger k = input.nextBigInteger();

    31 }

    32 }

    33 }

    View Code

    加法(斐波那契)

    8f900a89c6347c561fdf2122f13be562.png

    961ddebeb323a10fe0623af514929fc1.png

    1 import java.io.*;

    2 import java.util.*;

    3 import java.math.*;

    4

    5

    6 public class Main {

    7 public static void main(String[] args) {

    8 Scanner cin = new Scanner(System.in);

    9 BigInteger []fic = new BigInteger[1010];

    10 fic[0]=fic[1]=BigInteger.ONE;

    11 for(int i=2;i<=1000;i++){

    12 fic[i]=fic[i-1].add(fic[i-2]);

    13 }

    14 int T = cin.nextInt();

    15 for(int i=1;i<=T;i++){

    16 int tmp=cin.nextInt();

    17 System.out.println(fic[tmp]);

    18 }

    19 }

    20

    21 }

    View Code

    乘法(阶乘)

    8f900a89c6347c561fdf2122f13be562.png

    961ddebeb323a10fe0623af514929fc1.png

    1 import java.io.*;

    2 import java.util.*;

    3 import java.math.*;

    4

    5

    6 public class Main {

    7 public static void main(String[] args) {

    8 Scanner cin = new Scanner(System.in);

    9 BigInteger []jc = new BigInteger[1010];

    10 jc[1]=BigInteger.ONE;

    11 for(int i=2;i<=1000;i++){

    12 jc[i]=jc[i-1].multiply(BigInteger.valueOf(i));

    13 }

    14 int T = cin.nextInt();

    15 for(int i=1;i<=T;i++){

    16 int tmp=cin.nextInt();

    17 System.out.println(jc[tmp]);

    18 }

    19 }

    20

    21 }

    View Code

    标签:BigInteger,java,Scanner,大数,四则运算,new,import,public

    来源: https://www.cnblogs.com/pangbi/p/13862946.html

    展开全文
  • //大数加法 System.out.println("加的结果为 "+c1); BigInteger c2=a.subtract(b); //大数减法 System.out.println("减的结果为 "+c2); BigInteger c3=a.multiply(b); //大数乘法 System.out.println("乘的结果为 ...

    import java.io.*;

    import java.util.*;

    import java.text.*;

    import java.math.*;

    public class Main

    {

    public static void main(String []args)

    {

    Scanner cin = new Scanner(new BufferedInputStream(System.in));

    while(cin.hasNext())

    {

    BigInteger a=cin.nextBigInteger();

    BigInteger b=cin.nextBigInteger();

    BigInteger c1=a.add(b); //大数加法

    System.out.println("加的结果为 "+c1);

    BigInteger c2=a.subtract(b); //大数减法

    System.out.println("减的结果为 "+c2);

    BigInteger c3=a.multiply(b); //大数乘法

    System.out.println("乘的结果为 "+c3);

    BigInteger c4=a.divide(b); //大数除法

    System.out.println("除的结果为 "+c4);

    //BigInteger c5=a.mod(b); //大数模

    BigInteger c5=a.remainder(b);

    System.out.println("模的结果为 "+c5);

    BigInteger c6=a.max(b);//取最大

    System.out.println("最大为 "+c6);

    BigInteger c7=a.min(b); //取最小

    System.out.println("最小为 "+c7);

    if(a.equals(b)) //判断是否相等

    System.out.println("相等");

    else System.out.println("不相等");

    BigInteger c8=a.gcd(b); //求最大公约数

    System.out.println("最大公约数为 "+c8);

    }

    }

    }

    加法:

    展开全文
  • C语言/C++实现大数四则运算 大数加法运算、大数减法运算、大数乘法运算、大数除法运算

    所谓大数,就是数字非常(*100)的大,不管是int还是long long int都存储不下的数,如何进行加减乘除四则运算,这种情况在计算机的运算中还是很常见的,现将大致思路写上,并附上代码以供参考。

    整体思路

    首先数据必然是不能以int或者long long int存储,那么只能以字符串或者字符数组的形式存储。而且实际上,以字符数组接收数据最佳,然后把字符数组转化为int数组,再对数字进行计算。

    其次,联想起我们小学二年级所学的加减乘除四则运算,我们会发现一个最基本的规律:

    • 加减乘:从右往左计算
    • 除法:从左往右计算

    这就提示我们,数据需要进行一下处理,因为输入的数据是不定长的,所以我们需要把数据对齐。也就是说我们需要在加减乘,将数据倒过来,个位对个位,十分位对十分位;但是在除法中,我们只要按从左往右接收数据就可。

    数据结构

    int数组没有不能像字符数组那样,可以直接获取长度,所以最初想法就是在转化int数组的时候,再加上一个变量len,标记数组长度。

    #define MAX 1000
    
    struct bigNum{
    	int n[MAX];
    	int len;
    	bigNum(){
    		memset(n, 0, sizeof(n));
    		len = 0;
    	}
    };
    

    数据处理

    根据上边的思路,我们需要将char型数组转化为int型数组,而且是倒序,这样保证从个位开始对齐,方便加减乘运算,而除法只需要将char型数组转化为int型数组就可。

    当然还有一些其他的工具,比如比较两个bigNum的大小,这在减法和除法上需要用到,还有除法采用的是减法思想,所以除法的数组顺序也要有个调整。

    // 加减乘处理使用
    bigNum transfer(char str[]){
    	bigNum bn;
    	bn.len = strlen(str);
    	
    	int i;
    	for(i=0; i<bn.len; i++)
    		bn.n[i] = str[bn.len-1-i] - '0';
    	
    	return bn;
    }
    // 除法处理使用
    bigNum transferSort(char str[]){
    	bigNum bn;
    	bn.len = strlen(str);
    	
    	int i;
    	for(i=0; i<bn.len; i++)
    		bn.n[i] = str[i] - '0';
    	
    	return bn;
    }
    // 加减乘处理使用
    int compare(bigNum a, bigNum b){
    	if(a.len > b.len) return 1;
    	else if(a.len < b.len) return -1;
    	else{
    		int i;
    		for(i=a.len-1; i>0; i--){ //高位比较 
    			if(a.n[i] > b.n[i]) return 1;
    			else if(a.n[i] < b.n[i]) return -1;
    			else return 0;
    		}
    	}
    }
    // 除法处理使用
    int compareSort(bigNum a, bigNum b){
    	if(a.len > b.len) return 1;
    	else if(a.len < b.len) return -1;
    	else{
    		int i;
    		for(i=0; i<a.len; i++){ //高位比较 
    			if(a.n[i] > b.n[i]) return 1;
    			else if(a.n[i] < b.n[i]) return -1;
    			else return 0;
    		}
    	}
    }
    // 倒序,除法用
    void reverse(int a[], int len){
    	int i;	
    	for(i=0; i<len/2; i++){
    		int temp = a[i];
    		a[i] = a[len-1-i];
    		a[len-1-i] = temp;
    	}	
    }
    

    大数加法

    bigNum add(bigNum a, bigNum b){ // a+b
    	bigNum c;
    	int flag = 0;
    	int len = (a.len > b.len) ? a.len : b.len;
    	int i;
    	for (i=0; i<len; i++){
    		int temp = a.n[i] + b.n[i] + flag;
    		flag = (temp >= 10) ? 1 : 0; 
    		c.n[c.len++] = temp % 10; 
    	}
    	// 处理进位情况
    	if(flag != 0)
    		c.n[c.len++] = 1;  
    		
    	return c;	
    }
    

    大数减法

    bigNum sub(bigNum a, bigNum b){ // a-b 或 a+(-b) 
    	bigNum c;
    	int len = (a.len > b.len) ? a.len : b.len;	
    	int i;
    	for(i=0; i<len; i++){
    		if(a.n[i]<b.n[i]){ 
    			a.n[i+1]--;   //借一
    			a.n[i] += 10; //当十 
    		}
    		c.n[c.len++] = a.n[i] - b.n[i]; 
    	}
    	// 去除高位0 112-111=001,但是要保证有一位数 
    	while(c.n[c.len-1]==0 && c.len>1)
    		c.len--;
    		 
    	return c; 
    }
    

    大数乘法

    // 高精度与低精度乘法运算,为高精度乘法运算使用
    bigNum sigMul(bigNum a, int b){  // 低精度 b 
    	bigNum c;
    	int flag = 0;
    	int i;
    	for(i=0; i<a.len; i++){
    		int temp = a.n[i]*b + flag;
    		c.n[c.len++] = temp % 10; 
    		flag = temp/10;
    	}
    	while(flag){
    		c.n[c.len++] = flag % 10;
    		flag /= 10;
    	}
    	return c;
    }
    // 数组移位操作
    bigNum move(bigNum a, int index){
    	bigNum b = bigNum();
    	int i;
    	b.len = a.len + index;
    	for(i=0; i<a.len; i++){
    		b.n[i+index] = a.n[i];
    	}
    	return b;
    }
    // 高精度乘法运算
    bigNum mul(bigNum a, bigNum b){  // 高精度 b 
    	bigNum c = bigNum();
    	int i;
    	for(i=0; i<b.len; i++){
    		bigNum temp =  sigMul(a, b.n[i]);
    		bigNum temp_move = move(temp,i);
    		c = add(c, temp_move);
    	}
    	return c;
    }
    

    大数除法

    其实可以用逆序,但是当前正序思维好捋一点。减法暂时实现了除数是个位数,多位的还没来得及调试,但是考完试不太想debug,先放个坑在这里,啥时候记得补了,再回来填。欢迎大佬进行指导。

    // 高精度与低精度除法运算  逆序
    bigNum sigDiv(bigNum a, int b, int &r){ 
    	bigNum c;
    	c.len = a.len;
    	int i;
    	for(i=a.len-1; i>0; i--){ // 高位开始 
    		r =  r*10 + a.n[i];
    		if(r<b) c.n[i] = 0;
    		else{
    			c.n[i] = r/b;
    			r %= b;
    		}
    	}
    	while(c.n[c.len-1]==0 && c.len>1)
    		c.len--;
    		
    	return c;
    }
    // 高精度除法运算
    bigNum div(bigNum a, bigNum b, bigNum r){ // 正序   计算大数 a/b 
    	bigNum c;
    	c.len = a.len;
    	
    	int i; 
    	for(i=0; i<a.len; i++){ // 高位开始 
    		r.n[r.len++] = a.n[i];
    		int flag = compareSort(r, b);
    			
    		if(flag == -1) c.n[i] = 0;
    		else if(flag == 0){
    			 c.n[i] = 1;
    			 // 无需翻转也能为0 
    			 r = sub(r, b);
    			 r.len = 0;  // 结果为0,长度是1,这里需要处理,否则会多一位
    		} else{
    			// 做减法
    			int index = 0;
    			while(compareSort(r, b)==1){
    				reverse(r.n, r.len);
    				reverse(b.n, b.len);
    				r = sub(r, b);
    				reverse(r.n, r.len);
    				index++;
    			} 
    			c.n[i] = index;	
    		}	
    	}
    	// 处理开头 b.n-1 个0 ,循环左移
    	while(c.n[0]==0 && c.len>1){
    		int k;
    		for(k=0; k<c.len-1; k++)
    			c.n[k] = c.n[k+1];
    		c.len--;
    	}
    	
    	return c;
    } 
    

    整体代码

    #include<iostream>
    #include<cstring> 
    #include<stdio.h>
    #include<string.h>
    using namespace std;
    
    #define MAX 1000
    
    struct bigNum{
    	int n[MAX];
    	int len;
    	bigNum(){
    		memset(n, 0, sizeof(n));
    		len = 0;
    	}
    };
    
    void screenPrint(bigNum a){
    	int i;
    	for(i=a.len-1; i>=0; i--)
    		printf("%d", *(a.n+i)); //printf("%d", a.n[i]);
    	printf("\n");
    }
    void print(bigNum a){
    	int i;
    	for(i=0; i<a.len; i++)
    		printf("%d", *(a.n+i)); //printf("%d", a.n[i]);
    	printf("\n");
    }
    bigNum transfer(char str[]){
    	bigNum bn;
    	bn.len = strlen(str);
    	
    	int i;
    	for(i=0; i<bn.len; i++)
    		bn.n[i] = str[bn.len-1-i] - '0';
    	
    	return bn;
    }
    
    bigNum transferSort(char str[]){
    	bigNum bn;
    	bn.len = strlen(str);
    	
    	int i;
    	for(i=0; i<bn.len; i++)
    		bn.n[i] = str[i] - '0';
    	
    	return bn;
    }
    
    void reverse(int a[], int len){
    	int i;	
    	for(i=0; i<len/2; i++){
    		int temp = a[i];
    		a[i] = a[len-1-i];
    		a[len-1-i] = temp;
    	}	
    }
    
    bigNum add(bigNum a, bigNum b){ // a+b
    	bigNum c;
    	int flag = 0;
    	int len = (a.len > b.len) ? a.len : b.len;
    	int i;
    	for (i=0; i<len; i++){
    		int temp = a.n[i] + b.n[i] + flag;
    		flag = (temp >= 10) ? 1 : 0; 
    		c.n[c.len++] = temp % 10; 
    	}
    	if(flag != 0)
    		c.n[c.len++] = 1;
    		
    	return c;	
    }
    
    bigNum sub(bigNum a, bigNum b){ // a-b 或 a+(-b) 
    	bigNum c;
    	int len = (a.len > b.len) ? a.len : b.len;	
    	int i;
    	for(i=0; i<len; i++){
    		if(a.n[i]<b.n[i]){ 
    			a.n[i+1]--;   //借一
    			a.n[i] += 10; //当十 
    		}
    		c.n[c.len++] = a.n[i] - b.n[i]; 
    	}
    	// 去除高位0 112-111=001,但是要保证有一位数 
    	while(c.n[c.len-1]==0 && c.len>1)
    		c.len--;
    		 
    	return c; 
    }
    
    int compare(bigNum a, bigNum b){
    	if(a.len > b.len) return 1;
    	else if(a.len < b.len) return -1;
    	else{
    		int i;
    		for(i=a.len-1; i>0; i--){ //高位比较 
    			if(a.n[i] > b.n[i]) return 1;
    			else if(a.n[i] < b.n[i]) return -1;
    			else return 0;
    		}
    	}
    }
    
    int compareSort(bigNum a, bigNum b){
    	if(a.len > b.len) return 1;
    	else if(a.len < b.len) return -1;
    	else{
    		int i;
    		for(i=0; i<a.len; i++){ //高位比较 
    			if(a.n[i] > b.n[i]) return 1;
    			else if(a.n[i] < b.n[i]) return -1;
    			else return 0;
    		}
    	}
    }
    
    bigNum sigMul(bigNum a, int b){  // 低精度 b 
    	bigNum c;
    	int flag = 0;
    	int i;
    	for(i=0; i<a.len; i++){
    		int temp = a.n[i]*b + flag;
    		c.n[c.len++] = temp % 10; 
    		flag = temp/10;
    	}
    	while(flag){
    		c.n[c.len++] = flag % 10;
    		flag /= 10;
    	}
    	return c;
    }
    
    bigNum move(bigNum a, int index){
    	bigNum b = bigNum();
    	int i;
    	b.len = a.len + index;
    	for(i=0; i<a.len; i++){
    		b.n[i+index] = a.n[i];
    	}
    	return b;
    }
    
    bigNum mul(bigNum a, bigNum b){  // 高精度 b 
    	bigNum c = bigNum();
    	int i;
    	for(i=0; i<b.len; i++){
    		bigNum temp =  sigMul(a, b.n[i]);
    		bigNum temp_move = move(temp,i);
    		c = add(c, temp_move);
    	}
    	return c;
    }
    
    bigNum sigDiv(bigNum a, int b, int &r){ 
    	bigNum c;
    	c.len = a.len;
    	int i;
    	for(i=a.len-1; i>0; i--){ // 高位开始 
    		r =  r*10 + a.n[i];
    		if(r<b) c.n[i] = 0;
    		else{
    			c.n[i] = r/b;
    			r %= b;
    		}
    	}
    	while(c.n[c.len-1]==0 && c.len>1)
    		c.len--;
    		
    	return c;
    }
    
    bigNum div(bigNum a, bigNum b, bigNum r){ // 正序   计算大数 a/b 
    	bigNum c;
    	c.len = a.len;
    	//r.len = b.len+1; // a.len - b.len;
    	
    	int i; // 控制 a c
    	int j = 0;  // 控制 c 
    	
    	for(i=0; i<a.len; i++){ // 高位开始 
    		r.n[r.len++] = a.n[i];
    		int flag = compareSort(r, b);
    			
    		if(flag == -1) c.n[i] = 0;
    		else if(flag == 0){
    			 c.n[i] = 1;
    			 // 无需翻转也能为0 
    			 r = sub(r, b);
    			 r.len = 0;
    		} else{
    			// 做减法
    			int index = 0;
    			while(compareSort(r, b)==1){
    				reverse(r.n, r.len);
    				reverse(b.n, b.len);
    				r = sub(r, b);
    				reverse(r.n, r.len);
    				index++;
    			} 
    			c.n[i] = index;	
    		}	
    	}
    	
    	while(c.n[0]==0 && c.len>1){
    		int k;
    		for(k=0; k<c.len-1; k++)
    			c.n[k] = c.n[k+1];
    		c.len--;
    	}
    	
    	return c;
    } 
    
    int main(){
    	char str1[MAX], str2[MAX];
    	scanf("%s%s", str1, str2);
    	// ========================加减乘============================
    	// 反序,加减乘都是从右到左 
    	//bigNum bn_str1 = transfer(str1);
    	//bigNum bn_str2 = transfer(str2);
    	
    	//bigNum bn_add = add(bn_str1, bn_str2); 
    	//screenPrint(bn_add); 
    	
    	/*
    	bigNum bn_sub;
    	if(compare(bn_str1,n_str2) == 1){ //  a>b
    		bn_sub = sub(bn_str1, bn_str2); 	 
    	}else if(compare(bn_str1, bn_str2) == -1){ //  a<b
    		bn_sub = sub(bn_str2, bn_str1); 
    		printf("-");
    		
    	} else{ // a=b 
    		bn_sub = sub(bn_str1, bn_str2);
    	}
    	screenPrint(bn_sub);	
    	*/
    	
    	// ========================除法============================	
    	// 正序,除是从左到右  
    	bigNum bn_str1 = transferSort(str1);
    	bigNum bn_str2 = transferSort(str2);
    	
    	//reverse(bn_str1.n, bn_str1.len);
    	//print(bn_str1);
    	
    	
    	bigNum bn_r = bigNum();
    	if(compareSort(bn_str1, bn_str2) == 1){ //  a>b
    		bigNum bn_div = div(bn_str1, bn_str2, bn_r);
    		print(bn_div);
    	} 
    	else if(compareSort(bn_str1, bn_str2) == -1) printf("0"); //  a<b
    	else printf("1"); // a=b 
    		
    	return 0;
    } 
    

    不太想码字了,刚考完密码学第一次考试,人生啊,就是如此艰难。溜了溜了,睡觉。

    展开全文
  • 大数四则运算模板

    2021-02-27 14:26:26
    大数四则运算模板 介绍: 该模板能传任意数字进去计算结果 不管是小算大的还是大的算小的都能得到正确结果 除法那里只精确到小数点后10位数。 乘法用加法来模拟 除法用减法来模拟 下面的注释很详细。 代码如下: #...
  • ACM大数四则运算模板函数 包含加减乘除四则运算 比较常用的算法模板
  • 大数四则运算,DH算法C语言实现
  • 大数四则运算还小数及正负符号,可实现2000位以内的四则运算,大于2000需改数组,经初步测试通过,传上交流下希望能给点意见以便不断改进
  • c语言实现的大数四则运算
  • 大数四则运算 大数四则运算(大数加减乘除,无限位数运算) 大数 数据结构 加减乘除 无限位数 运算
  • C语言实现大数四则运算

    千次阅读 2019-03-21 15:23:34
    C语言实现大数四则运算 一、简介 众所周知,C语言中INT类型是有限制,不能进行超过其范围的运算,而如果采用float类型进行运算,由于float在内存中特殊的存储形式,又失去了计算的进度。要解决整个问题,一种...
  • 使用C#编写的大数四则运算计算器。
  • 整数大数四则运算

    2016-12-04 22:27:35
    代码储存,大数四则运算 翻转课堂#include #include #include <stdlib.h>int v[10005]={0};//全局变量作为输出 int add(int *a,int *b,int lena,int lenb) {int j,len1,len2,length,digit=0; if(lena>lenb)
  • 大数四则运算的C++实现,大数四则运算包括加减乘除的运算,使用链表实现。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 459
精华内容 183
关键字:

大数四则运算