首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【基础算法】C++经典练习题-高精度运算

题目1:高精度加法

题目描述

计算a+b的值,a,b皆为不超过240位的正整数。

输入格式

两个正整数,每行一个

输出格式

一个数,代表两个整数的和

样例输入样例输出标程

/*高精度加法*/

#include

using namespace std;

string s1,s2;

int a[5010]={0},b[5010]={0},c[5010]={0};

int main()

{

cin>>s1>>s2;

int la=s1.size();

int lb=s2.size();

int lc=la>lb?la:lb;

for(int i=0;i

{

a[la-i]=s1[i]-'0';//字符转化成整数

}

for(int i=0;i

{

b[lb-i]=s2[i]-'0';

}

for(int i=1;i

{

c[i]=a[i]+b[i];

}

for(int i=1;i

{

c[i+1]=c[i+1]+c[i]/10;

c[i]=c[i]%10;

}

while(c[lc]==0 && lc>1)//删除前导0

{

lc--;

}

for(int i=lc;i>0;i--)//逆向输出

{

cout

}

return 0;

}题目2:高精度减法题目描述

高精度减法,求a-b。a,b都是不超过240位的非负整数。

输入格式

两个非负整数,每行一个。

输出格式

一个整数,代表两个整数相减之后的结果。

样例输入样例输出标程

#include

using namespace std;

string s1,s2,t;

int a[250]={0},b[250]={0},c[250]={0};

char f;

int main(){

   cin>>s1>>s2;

   if(s1.size()

       f='-';

       t=s1;

       s1=s2;

       s2=t;

  }

   int la=s1.size();

   int lb=s2.size();

   int lc=la>lb?la:lb;

   for(int i=0;i

       a[la-i]=s1[i]-'0';

  }

   for(int i=0;i

       b[lb-i]=s2[i]-'0';

  }

   for(int i=1;i

       if(a[i]

           a[i]=a[i]+10;

           a[i+1]=a[i+1]-1; //向后借一位

      }

       c[i]=a[i]-b[i];//逐位相减

  }

   while(c[lc]==0&&lc>1){//删除前导0

       lc--;

  }

   if(f=='-')cout

   for(int i=lc;i>0;i--){

       cout

  }

   if(lc

   return 0;

}题目3:高精度乘法题目描述

高精度乘,求两个很大的非负整数相乘的结果。

输入格式

2个非负整数,每个一行,每个整数不超过240位。

输出格式

一个整数,表示相乘的结果。

样例输入样例输出标程

#include

using namespace std;

string s1,s2;

int a[500]={0},b[500]={0},c[500]={0};

int main(){

   cin>>s1>>s2;

   int la=s1.length();

   int lb=s2.length();

   int lc=la+lb;

   for(int i=0;i

       a[la-i]=s1[i]-'0';

  }

   for(int i=0;i

       b[lb-i]=s2[i]-'0';

  }

   for(int i=1;i

       for(int j=1;j

           c[i+j-1]+=a[i]*b[j];

      }

  }

   for(int i=1;i

       c[i+1]+=c[i]/10;

       c[i]=c[i]%10;

  }

   while(c[lc]==0&&lc>1){//删除前导0

       lc--;

  }

   for(int i=lc;i>=1;i--){//逆向输出

       cout

  }

   return 0;

}题目4:高精度整数除法题目描述

求a/b的结果。已知a,b为10^8范围内的非负整数,求a/b保留前n位小数商的结果。(5.1.72)

输入格式

a b n

输出格式

一行数字

样例输入

97 61 50样例输出标程

#include

using namespace std;

int main(){

   int a,b,k,n,i;

   cin>>a>>b>>n;

   cout

   k=a%b;

   for(i=0;i

       k=k*10;

       cout

       k=k%b;

  }

   return 0;

}

爱编程  玩科技  懂教育

#征稿

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OYyOF3Ytub4588nO6jzqY5Jw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券