"
引言 : int最大能表示的数约在10^9,最大的long long也只能存储约在10^19范围内的数。那怎么进行大数的运算呢,拿起草稿纸,做一个加法运算,看看会有哪些步骤。
题解 :
用字符数组来存储大数,每一位当做一个字符,可以开多大的数组,就能计算多少位的数。
举个栗子,计算99999999999+1. 直接用int,答案显然是错的。用两个字符数组
s1 :
9 9 9 9 9 9 9 9 9 9 9 \0
s2 :
1 \0
再用字符数组s来存储两数之和,显然s最长为s1的长度加1。从最低位依次模拟加法,注意进位,注意字符0与数字0的区别,注意数组从0开始。
s:
1 0 0 0 0 0 0 0 0 0 \0
?1234567891011121314151617181920212223242526272829303132333435363738394//代码效果参考:https://v.youku.com/v_show/id_XNjQwMDM5NzI4MA==.html
0414243444546474849#include#include void Bignum_add(char s1,char s2,char *s){ int i,j,a,l1,l2,L,t; l1=strlen(s1); l2=strlen(s2); s【0】='0'; a=0; if(l1>l2) L=l1; else L=l2; s【L+1】='\0'; for(i=L;l1>0&&l2>0;i--) { a=(s1【--l1】-'0')+(s2【--l2】-'0')+a/10; s【i】=a%10+'0'; } while(l1){ a=(s1【--l1】-'0')+a/10; s【i--】=a%10+'0'; } while(l2){ a=(s2【--l2】-'0')+a/10; s【i--】=a%10+'0'; } s【i】=a/10+'0'; t=0; while(s【t】=='0'&&t printf(""\n""); } return 0;}"