JunYearPrisoner / some-qusetion-and-address-means-about-compiler

2 stars 4 forks source link

【算法】高精度 #8

Open JunYearPrisoner opened 4 years ago

JunYearPrisoner commented 4 years ago

说明:对于较大的数,超过long long 所能表达的范围,将其拆成一个一个的数或者是几个几个的数,储存在数组中用一个数组表示一个数。 读入: (1)用字符串读入,因为整数存不下~ (2)利用字符串函数和操作运算,将每一位数取出,存入一个数组里。一般是倒着存。例如:123456就要a[]={6,5,4,3,2,1} 这里需要计算一下这个数字的长度,调用c/c++函数库shring.h中的一个函数:strlen()。strlen所作的是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符为止,然后返回计数器值(长度不包含结束符)。

char str[9999]; int number[9999]; scanf("%s",str+1);//用字符串读入 int len=strlen(str+1);//这个数的长度为len for(int i=1;i<=len;i++){ number[i]=str[len-i+1]-'0';//倒叙储存,每一位存一个数 }

*这个屑没有下git客户端将就看。

(3)输出:跑循环就ok了

for(int i=len;i>0;i--){ printf("%d",number[i]);//一位一位输出这个数 }

JunYearPrisoner commented 4 years ago

【应用·比大小】 1、先比较两个数的长度,长度更长的数大。 2、若两个数长度相等,则从高位到低位挨个比较,要是有某一位数字不同,较大的数大,不然的话继续比较下一位。 3、若比到最后都没有比出谁大谁小,那这两个数一样大。 if(lena>lenb) return 1; //lena表示a这个数的长度,lenb则表示b的长度 if(lenb>lena) return 0; for(int i=lena;i>0;i--){ //从高位到底位一位一位比较 if(a[i]>b[i]) return 1; if(b[i]>a[i]) return 0; }

JunYearPrisoner commented 4 years ago

本来想自己打一遍加深印象.....懒癌晚期就饶了我吧,贴链接 https://blog.csdn.net/zsjzliziyang/article/details/82050337