在编程题里有这么一种类型的题目,大数运算,大数有多大呢?特别大,特别大,超过了基本类型的范围,高精度肯定也有四则运算吗,这里主要讲加法,减法乘法除法,后续在讲,喜欢的的记得点个关注哦,这里就介绍高精度加法的解决过程。
人类进行加法运算的时候,会对齐位置,个位对个位,十位对十位,可是计算机输入时,如果长度不一致,是不会对齐的,比如
1111111111 252222 353333 4444444444
这样就不能个位对个位,十位对十位进行相加了,那该怎么办呢?
这个时候,我们就可以把字符串逆序过来啊,对不对。比如像这样
1111111111 222252 3333631111 1111363333 333353 4444444444 7777974444 4444797777
把逆序的加和得到的答案,再逆序,不就是正确答案了?
那么做题的流程就来了!!!!!!
1.首先用两个字符串数组保存大数!
2.然后把字符串逆序输入到整型数组中,方便进行加法!
3.然后按位进行计算,先求和,再进位!
4.最后逆序输出求和进位以后的结果!
上代码:
#include#include #define LENGTH 1000+1 void nxzfc(char [],int [],int ); int main(void) { //首先用两个字符串,保存要进行加法的两个数 char zf_num1[LENGTH],zf_num2[LENGTH]; gets(zf_num1); gets(zf_num2); //求出两个数的长度,为后面逆序做准备 int num1_len = strlen(zf_num1); int num2_len = strlen(zf_num2); //然后把字符串逆序存入整型数组仲 int num1[LENGTH] = {0}; int num2[LENGTH] = {0}; //写一个函数,把字符串逆序存入整型数组 nxzfc(zf_num1,num1,num1_len); nxzfc(zf_num2,num2,num2_len); //逆序好了,就可以从左往右开始进行加法运算了 //这里呢,先实现加法,然后再进位,比较清晰易懂,而且方便 int i; int max_length = num1_len>num2_len?num1_len:num2_len; //定义一个和数组,用来保存相加的结果 int he[LENGTH] = {0}; for(i = 0;i < max_length;i++) { he[i] = num1[i] + num2[i]; } //然后再进位 int j; for(j = 0;j < max_length;j++) { if(he[j]>=10) { he[j+1] += he[j]/10; //比十大,就进位 he[j] %= 10; //十位进位以后,留下个位 } } //判断最大长度的后面一个是不是零,是零说明进位了,总长度要加一 int k; if(he[max_length]!=0) { for(k = max_length;k >= 0;k--) { printf("%d",he[k]); } } else { for(k = max_length-1 ;k >= 0;k--) { printf("%d",he[k]); } } return 0; } void nxzfc(char zf[],int num[],int length) { int i; //因为是逆序,zf数组的第一位,就是num数组的最后一位 for(i = 0;i < length;i++) { num[length-i-1] = zf[i] - '0'; } }



