高精度计算和竖式计算没什么区别,但由于数据很大需要用字符串读入所以过程中可能会有一些小问题。高精度算是学oi的基本知识所以直接上我的优(chou)美(lou)代码。
高精度算法,属于处理大数字的数学计算方法。在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字。一般这类数字我们统称为高精度数,高精度算法是用计算机对于超大数据的一种模拟加,减,乘,除,乘方,阶乘,开方等运算。对于非常庞大的数字无法在计算机中正常存储,于是,将这个数字拆开,拆成一位一位的,或者是四位四位的存储到一个数组中, 用一个数组去表示一个数字,这样这个数字就被称为是高精度数。高精度算法就是能处理高精度数各种运算的算法,但又因其特殊性,故从普通数的算法中分离,自成一家。--百度百科
高精度加法(洛谷P1601)
高精度加法,x相当于a+b problem,不用考虑负数。
输入格式:
分两行输入a,b<=10^500
输出格式:
输出只有一行,代表A+B的值
2
#include<cstdio> #include<cstring> #include<string> #include<iostream> using namespace std; int n,k; char shu1[1001],shu2[1001]; char c1[1001],c2[1001]; char ans[1001]; int main() { memset(c1,0,sizeof(c1)); memset(c2,0,sizeof(c2)); scanf("%s",shu1); scanf("%s",shu2); int n1=strlen(shu1); int n2=strlen(shu2); int js1=1,js2=1; for(int i=n1-1;i>=0;--i) { c1[js1]=shu1[i]-‘0‘; js1++; } for(int i=n2-1;i>=0;--i) { c2[js2]=shu2[i]-‘0‘; js2++; } int sum=1; js1--; js2--; while(sum<=js1||sum<=js2) { ans[sum]+=c1[sum]+c2[sum]; if(ans[sum]>=10) { ans[sum]-=10; ans[sum+1]+=1; } sum++; } while(ans[sum]==0&&sum!=1) sum--; for(int i=sum;i>=1;--i) printf("%d",int(ans[i])); return 0; }
原文:https://www.cnblogs.com/poi-bolg-poi/p/10827841.html