高精度运算: 345 1234 ---- 468 548 628 --- 8 加法: 大整数加法 1、倒序转存到数组 2、c=a+b+余数,余数x=0,要加到最大一位数; 3、拿进位,处理c 4、处理有可能多出来的一位数 5、去前导零 6、倒序输出(从去前导零之后那个位置开始倒序输出)
【 题目描述 】
输入2个整数m,n(0 < m,n < 10^25),求这两个数的和并输出。
【 输入 】
输入两行,每行一个正整数,长度不超过25
【 输出 】
一行一个整数,即它们的和
【 样例输入 】
9 1
【 样例输出 】
10
#include <iostream>
#include <cstring>
using namespace std;
const int N=810;//把N定义成一个常量,c++这么写没问题(不可变变量)
char a[N],b[N];
int a1[N],b1[N],c1[N];
int main(){
cin>>a>>b;
int lena=strlen(a);
int lenb=strlen(b);
for(int i=0;i<lena;i++) a1[lena-i-1]=a[i]-48;
for(int i=0;i<lenb;i++) b1[lenb-i-1]=b[i]-48;
int lenc=0,x=0;//x是余数
while(lenc<lena||lenc<lenb){
c1[lenc]=a1[lenc]+b1[lenc]+x;
x=c1[lenc]/10;
c1[lenc]%=10;
lenc++;
}
c1[lenc]=x;
while(c1[lenc]==0&&lenc>0) lenc--;
for(int i=lenc;i>=0;i--)
cout<<c1[i];
return 0;
}
减法:
大整数减法 1、相同的两个数相减等于0。 2、小数减大数,处理负数的问题。 3、倒序转存到数组,c=a-b; 4、处理c是负数(借一当十)。 5、去除前导零 6、倒序输出
【 题目描述 】
输入2个整数m,n(0<m,n<1025),求这两个数的差并输出。
【 输入 】
输入两个整数,每个整数占一行
【 输出 】
输出这两个整数的差
【 样例输入 】
7 2
【 样例输出 】
5
#include <iostream>
#include <cstring>
using namespace std;
const int N=610;
char a[N],b[N],c[N];
int a1[N],b1[N],c1[N];
int main(){
cin>>a>>b;
if(strcmp(a,b)==0){
cout<<0;
return 0;
}
int lena=strlen(a),lenb=strlen(b);
if((lena==lenb&&strcmp(a,b)<0)||lena<lenb){
strcpy(c,a);//字符串复制函数
strcpy(a,b);
strcpy(b,c);
swap(lena,lenb);
cout<<"-"
}
for(int i=0;i<lena;i++) a1[lena-i-1]=a[i]-48;
for(int i=0;i<lenb;i++) b1[lenb-i-1]=b[i]-48;
for(int i=0;i<lena;i++){
c1[i]=a1[i]-b1[i];
if(c1[i]<0){
c1[i]+=10;
a1[i+1]--;
}
}
while(c1[lena-1]==0) lena--;
for(int i=lena-1;i>=0;i--)
cout<<c1[i];
return 0;
}
该博客介绍了如何使用C++进行高精度运算,具体包括两个部分:一是计算两个不超过10^25的大整数之和,二是计算它们的差。通过对输入的整数进行逐位处理,实现大整数的精确加减操作,并提供了样例输入和输出以展示算法的正确性。
2万+

被折叠的 条评论
为什么被折叠?



