大数减法

简介:


#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int max(int m,int n)
{
    if(m>n)
    return m;
    return n;
}
int compare(char *str_a,char *str_b)
{
    int len_a, len_b;
    len_a = strlen(str_a);          //分别获取大数的位数进行比较
    len_b = strlen(str_b);

    if ( strcmp(str_a, str_b) == 0 )    //返回比较结果
        return 0;
    if ( len_a > len_b )
        return 1;
    else if( len_a == len_b )
        return strcmp(str_a, str_b);
    else
        return -1;
}
int main()
{
    int f, n;
    int i, k;
    char str_a[1000], str_b[1000];
    int num_a[1000] ;          //初始化大数数组,各位全清0
    int num_b[1000] ;
    int num_c[1000];

    while (scanf("%s%s",str_a,str_b)!= EOF) //可进行多组测试
    {
        memset(num_a,0,sizeof(num_a));
        memset(num_b,0,sizeof(num_b));
       int  len_a = strlen(str_a);         //分别获得两个大数的位数
       int  len_b = strlen(str_b);

        k = max(len_a,len_b)  ;                 //获得最大的位数;
        num_c[0] = 0;
        f = 0;
        n = compare(str_a,str_b);
        for (i=0;i<len_a;i++)                   //颠倒存储
            num_a[i] = str_a[len_a-i-1] - '0';
        for (i=0;i<len_b;i++)
            num_b[i] = str_b[len_b-i-1] - '0';

        for (i=0;i<k;i++)         //逐位进行减法
        {
            if (n>=0)
            {
                if (num_a[i] >= num_b[i])
                    num_c[i] = num_a[i] - num_b[i];
                else
                {
                    num_c[i] = num_a[i] - num_b[i] + 10;
                    num_a[i+1]--;
                }
            }
            else
            {
                if ( num_b[i] >= num_a[i])
                    num_c[i] = num_b[i] - num_a[i];
                else
                {
                    num_c[i] = num_b[i] - num_a[i] + 10;
                    num_b[i+1]--;
                }
            }

        }
        if (n<0)            //按要求打印
            printf("-");
        for (i=k-1; i>=0; i--)
        {
            if (num_c[i])
                f = 1;
            if (f || i == 0 )
                printf("%d",num_c[i]);
        }
        printf("\n");
    }
    return 0;
}


目录
相关文章
|
分布式计算 关系型数据库 MySQL
Job 作业的使用--创建、查看、执行、删除 | 学习笔记
快速学习 Job 作业的使用--创建、查看、执行、删除
424 0
Job 作业的使用--创建、查看、执行、删除 | 学习笔记
|
存储 Android开发
[lcm] Qualcomm平台显示屏lcd添加I2C读取功能
1硬件设计分析采用IC 的I2C 功能读取ID 寄存器 2ARM9 更改GPIO 配置 3LK 添加代码 4LK 阶段不接屏不亮背光 5kernel 阶段不接屏不亮背光 6kernel 阶段I2C 配置 更多相关文章: 更多相关文章: 《高通Qualcom...
4028 0
|
测试技术 开发工具 git
推荐一个不错的弱网模拟框架
在《APP网络性能测试白皮书》中我们已经探讨了为什么要做弱网测试以及弱网测试中需要关注的一些指标,在《弱网环境搭建方案选型》这篇文章中我们讨论了各种弱网模拟方案的优缺点,其中在预算有限的情况下我是比较推荐基于ATC和树莓派去搭建弱网模拟平台的,这块的内容可以参考《树莓派搭建弱网测试环境全纪录(1)》和《树莓派搭建弱网测试环境全纪录(2)》,基于ATC的方案其实已经可以满足绝大部分场景的需求,但是原生的ATC方案易用性比较差,每次修改网络场景需要把被测APP置于后台,切换到网络模拟界面改参数,然后再切回被测APP,影响被测APP的操作连贯性,今天我要推荐的是一个基于ATC改造后的弱网模拟工具
540 0
推荐一个不错的弱网模拟框架
|
网络协议 Linux
虚拟机linux的ip和dns设置
今天弄了一天的虚拟机linux连接外网的问题.终于弄成功了。把问题都整理出来,以防以后忘记我安装的是redhat linux 5.4(64位).在安装的界面的时候,就配置了ip,子网掩码,网关,(没有配置DNS).
1146 0
|
XML Java 关系型数据库
深入了解数据校验:Java Bean Validation 2.0(JSR303、JSR349、JSR380)Hibernate-Validation 6.x使用案例【享学Java】(上)
深入了解数据校验:Java Bean Validation 2.0(JSR303、JSR349、JSR380)Hibernate-Validation 6.x使用案例【享学Java】(上)
深入了解数据校验:Java Bean Validation 2.0(JSR303、JSR349、JSR380)Hibernate-Validation 6.x使用案例【享学Java】(上)
|
10月前
|
存储 消息中间件 负载均衡
中间件常见问题
解决中间件问题的关键在于深入理解业务需求、系统架构和中间件的工作原理,然后结合实际情况进行针对性的优化和配置。同时,定期监控和评估中间件的性能和稳定性也是非常重要的。
174 3
|
10月前
|
存储 前端开发 安全
快速了解std::promise的工作原理和使用
快速了解std::promise的工作原理和使用
248 3
|
网络协议 安全 Android开发
软件丨李跳跳们现在该如何跳呢?
前段时间,李跳跳等软件被某大厂发了律师函,之后,好些个跳广告软件都相继发布公众号说明,停止维护软件,并且下架了相关软件,那我们还能跳吗?该怎么跳呢?
682 0
软件丨李跳跳们现在该如何跳呢?