c/c++语言开发共享高精度计算

高精度计算和竖式计算没什么区别,但由于数据很大需要用字符串读入所以过程中可能会有一些小问题。高精度算是学oi的基本知识所以直接上我的优(chou)美(lou)代码。 高精度算法,属于处理大数字的数学计算方法。在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字。一般 …

高精度计算和竖式计算没什么区别,但由于数据很大需要用字符串读入所以过程中可能会有一些小问题。高精度算是学oi的基本知识所以直接上我的优(chou)美(lou)代码。

高精度算法,属于处理大数字的数学计算方法。在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字。一般这类数字我们统称为高精度数,高精度算法是用计算机对于超大数据的一种模拟加,减,乘,除,乘方,阶乘,开方等运算。对于非常庞大的数字无法在计算机中正常存储,于是,将这个数字拆开,拆成一位一位的,或者是四位四位的存储到一个数组中, 用一个数组去表示一个数字,这样这个数字就被称为是高精度数。高精度算法就是能处理高精度数各种运算的算法,但又因其特殊性,故从普通数的算法中分离,自成一家。–百度百科

高精度加法(洛谷p1601)

题目描述

高精度加法,x相当于a+b problem,不用考虑负数。

输入输出格式

输入格式:

 

分两行输入a,b<=10^500

 

输出格式:

 

输出只有一行,代表a+b的值

 

输入输出样例

输入样例#1: 

1  1

输出样例#1: 

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;  }

 高精度减法(洛谷p2142)

题目描述

高精度减法

输入输出格式

输入格式:

 

两个整数a,b(第二个可能比第一个大)

 

输出格式:

 

结果(是负数要输出负号)

 

输入输出样例

输入样例#1: 

2  1

输出样例#1: 

1

说明

20%数据a,b在long long范围内

100%数据0<a,b<=10的10000次方

比较麻烦,稍微讲一讲。

#include<cstdio>  #include<cstring>  #include<string>  using namespace std;  int n,k;  char shu1_false[10001],shu2_false[10001];  char shu1_true[10001],shu2_true[10001];  char c1[10001],c2[10001];  char ans[10001];  int main()  {      memset(c1,0,sizeof(c1));//初始化       memset(c2,0,sizeof(c2));//初始化       scanf("%s",shu1_false);//读入       scanf("%s",shu2_false);//读入       int n1_false=strlen(shu1_false),n2_false=strlen(shu2_false);//计算两个串的长度。       bool bz1=0,bz2=0;      int js1_false=0,js2_false=0;      for(int i=0;i<n1_false;++i)      {          if(bz1==0&&shu1_false[i]!='0') bz1=1;          if(bz1==1)          {              shu1_true[js1_false]=shu1_false[i];              js1_false++;          }      }      js1_false--;      for(int i=0;i<n2_false;++i)      {          if(bz2==0&&shu2_false[i]!='0') bz2=1;          if(bz2==1)          {              shu2_true[js2_false]=shu2_false[i];              js2_false++;          }      }      js2_false--;//将两个串去除前导零并记下来。       int js1_true=1,js2_true=1;      int n1_true=strlen(shu1_true),n2_true=strlen(shu2_true);      if(n2_true>n1_true||(n2_true==n1_true&&strcmp(shu1_true,shu2_true)<0))//判断两个串谁大谁小。 串一<串二时。       {          printf("-");//输出﹣号。           for(int i=js2_false;i>=0;--i)          {              c1[js1_true]=shu2_true[i]-'0';              js1_true++;          }          for(int i=js1_false;i>=0;--i)          {              c2[js2_true]=shu1_true[i]-'0';              js2_true++;          }//将第二个串存到c1, 第一个串存到c2       }      else//大于的话。       {          for(int i=js1_false;i>=0;--i)          {              c1[js1_true]=shu1_true[i]-'0';              js1_true++;          }          for(int i=js2_false;i>=0;--i)          {              c2[js2_true]=shu2_true[i]-'0';              js2_true++;          }//将第一个串存到c1, 第二个串存到c2       }      js1_true--; js2_true--;      int sum=1;      while(sum<=js1_true||sum<=js2_true)      {          if(c1[sum]<c2[sum])          {              c1[sum]+=10;              c1[sum+1]-=1;          }//借一           ans[sum]=c1[sum]-c2[sum];          sum++;      }//计算减法。       while(ans[sum]==0&&sum!=1) sum--;//去前导零。       for(int i=sum;i>=1;--i)//输出答案。           printf("%d",int(ans[i]));      return 0;  }

 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/603548.html

(0)
上一篇 2021年5月11日
下一篇 2021年5月11日

精彩推荐