高精度运算

该博客介绍了如何使用C++进行高精度运算,具体包括两个部分:一是计算两个不超过10^25的大整数之和,二是计算它们的差。通过对输入的整数进行逐位处理,实现大整数的精确加减操作,并提供了样例输入和输出以展示算法的正确性。
高精度运算:
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;
}

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值