c++题解 P1743 5.2减法神童(

原题:  1743.5.2减法神童2023zjhs020 于2024-12-15

本题注意事项:

1.先判断是否为负数,如果是则输出“-”;
用字符串解决该题;
2.做减法时,判断是否不够减,是则借位;
3.判断是否有前导零,有则删除
(记得给五星好评)

#include<bits/stdc++.h>//头文件
using namespace std;
const int maxn=270;//定义
char sa[maxn],sb[maxn];
char tmp[maxn];
long a[maxn],b[maxn],c[maxn];
int main()
{
    scanf("%s",sa);//输入
    scanf("%s",sb);
    memset(c,0,sizeof(c)); //初始化
    long la=strlen(sa);
    long lb=strlen(sb);
    if(la<lb||((la==lb)&&strcmp(sa,sb)<0))//判断是否为负数
    {
        strcpy(tmp,sa);//交换
        strcpy(sa,sb);
        strcpy(sb,tmp);
        swap(la,lb);
        printf("%c",'-');//输出“-”;
    }
    long lc=la>lb ? la : lb;//判断那个是被减数的长度
    for(int i=0;i<la;i++)//循环
    {
        a[la-i]=sa[i]-'0';//转换为数组
    }
    for(int i=0;i<lb;i++)//循环
    {
        b[lb-i]=sb[i]-'0';    //转换为数组
    }
    for(int i=1;i<=lc;i++)//进行运算
    {
        if(a[i]<b[i])//判断是否不够减
        {
            a[i]+=10;//借位
            a[i+1]--;
        }
        c[i]=a[i]-b[i];
    }
    while(c[lc]==0)//判断是否有前导零
    {
        lc--;
    }
    for(int i=lc;i>=1;i--)//倒序输出
    {
        cout<<c[i];
    }
    return 0;//程序结束
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值