##高精度是一种很巧妙的方法呀。
大体思路是,将两个很大的整数分别存放于char数组a,b中,分别计算数组长度。再将对应的位数转化为整形相加,如‘2’-‘0’得到2,因为数字字符的阿斯克吗是连续的。个位和个位相加存入另一个int类型的数组中,最后得到一个每个元素都可能比10大的数,最后进位求解。。由于不确定哪个数组比较长(对应的正数更大位数更多),如果单纯地对应相加可能就是千位和个位相加,所以相加就会很麻烦,因为相加进位必须是相同位数相加,但是在上面的代码中我也用了较为繁琐的代码实现了这一问题(尽管其中有些许bug)。
但是只要存入字符数组时以个位,十位,百位这样的顺序放入求解过程就会方便许多。因为这样可以一一对应相加,就像这样string str1,str2;
int a[250],b[250],len; //数组的大小决定了计算的高精度最大位数
int i;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
cin>>str1>>str2; //输入两个字符串
a[0]=str1.length(); //取得第一个字符串的长度
for(i=1;i<=a[0];i++) //把第一个字符串转换为整数,存放在数组a中
a[i]=str1[a[0]-i]-'0'; ///////////////这就是倒序输入!!
b[0]=str2.length(); //取得第二个字符串长度
for(i=1;i<=b[0];i++) //把第二个字符串中的每一位转换为整数,存放在数组B中
b[i]=str2[b[0]-i]-'0'; ////////////////这就是倒序输入!!!
len=(a[0]>b[0]?a[0]:b[0]); //取两个字符串最大的长度
原文代码链:https://blog.csdn.net/fanyun_01/article/details/79967170
(!!!!!!!看正确的点这个链接!通俗易懂)
也可以这样倒序输入`在这里插入代码片`char a1[100],b1[100];
int a[100],b[100],c[100],lena,lenb,lenc,i,x;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
gets(a1); //先存在两个字符数组中
gets(b1);
ena=strlen(a1);
lenb=strlen(b1);
for (i=0;i<=lena-1;i++) a[lena-i]=a1[i]-48;//倒序读入进另外的数组
for (i=0;i<=lenb-1;i++) b[lenb-i]=b1[i]-48;