面试题大数相加相减

2023-10-21 04:08
文章标签 相加 面试题 大数 相减

本文主要是介绍面试题大数相加相减,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

根据http://www.cnblogs.com/caixu/archive/2011/09/26/2192189.html这个修改了相加函数,并增加了相减函数。


#include <iostream>

 #include <string>                                                                                                    

using namespace std;

const int MAX_LENGTH = 1000;

 class ds
 {
 public:
         void add(string x, string y);
         void sub(string x, string y);
     private :
        string s1,s2;

 };


void ds::sub(string x, string y)
{
    int length1 = x.length();
    int length2 = y.length();
    int long_length;
    int short_length;


    string bigger_string;
    string smaller_string;


    int i = 0;
    int big = -1;
    if (length1 > length2) {
        bigger_string = x;
        smaller_string = y;
        long_length = length1;
        short_length = length2;
    } else if (length1 < length2) {
        bigger_string = y;
        smaller_string = x;
        long_length = length2;
        short_length = length1;
        big = 2;
    } else {
        for (i = 0; i< length1; i++) {
            int sub_value = x[length1-1-i] - y[length1-1-i];
            if(sub_value > 0) {
                bigger_string = x;
                smaller_string = y;
                big = 0;
                break;
            }
            else if (sub_value < 0) {
                bigger_string = y;
                smaller_string = x;
                big = 1;
                break;
            }
            else{}


        }


        if (-1 == big) {
            cout << "0" << endl;
            return;
        }
    }


    int sub = 0;
    int flag = 0;
    int sub_sum[MAX_LENGTH];
    for (i = 0; i<short_length;i++) {
        sub = bigger_string[long_length-1-i] - smaller_string[short_length-1-i];
        if (sub <0) {
            sub += 10;
            flag = 1;
        } else {
            flag = 0;
        }
        if(1 == flag)
            bigger_string[long_length-1-i-1] -= ('1' - '0');
        sub_sum[i] = sub;
    }


    for(i; i<long_length; i++) {
        sub_sum[i] = bigger_string[long_length-1-i] - '0';
    }

    if ( big > 0) {
        cout << "-";
    }


    int str_flag = 0;
    for (i--; i>=0;i--) {
        if (0 == str_flag &&(0 == (sub_sum[i] - '0')))
            ;
        else 
            cout << sub_sum[i];
    }
}


void ds::add(string x, string y)
{
    int flag = 0;
    int i;
    int length1 = x.length();
    int length2 = y.length();
    string long_string;
    string short_string;
    int short_length;
    int long_length;


    if (length1 >length2) {
        long_string = x;
        short_string = y;
        short_length = length2;
        long_length = length1;
    }
    else {
        long_string = y;
        short_string = x;
        short_length = length1;
        long_length = length2;
    }


    cout << "long is " << long_string << "length is " << long_length << ", short is " << short_string << ",short length is " << short_length<<endl;
    int add_sum[MAX_LENGTH];
    int sum = 0;


    for (i = 0; i<short_length;i++) {
        sum = long_string[long_length-1-i] - '0' + short_string[short_length-1-i] - '0' + flag;
        if (sum >= 10) {
            sum -= 10;
            flag = 1;
        } else {
            flag = 0;
        }
        add_sum[i] = sum;
    }


    for (; i<long_length;i++) {
        sum = long_string[long_length-1-i] - '0' + flag;
        if (sum >= 10) {
            sum -= 10;
            flag = 1;
        } else {
            flag = 0;
        }
        add_sum[i] = sum;
    }


    if (flag == 1)
        add_sum[i++] = 1;


    for(i=i--;i>= 0;i--)
        cout << add_sum[i];
}


int main()
{
    ds dashu;
    string x1,x2;
   cout<<"please input two word:" <<endl;
    cin >>x1>>x2;
    int n1=x1.length();
    int n2=x2.length();
    if (n1==n2) 
        dashu.equal(x1,x2,n1,n2);
    else
        dashu.nequal(x1,x2,n1,n2);
 
    dashu.add(x1, x2);
    cout <<endl;
    cout<<"please input two word:" <<endl;
    cin >>x1>>x2;
    dashu.sub(x1, x2);
    cout <<endl;
    return 0;
}

这篇关于面试题大数相加相减的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/251814

相关文章

uva 10069 DP + 大数加法

代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <queue>#include <map>#include <cl

荣耀嵌入式面试题及参考答案

在项目中是否有使用过实时操作系统? 在我参与的项目中,有使用过实时操作系统。实时操作系统(RTOS)在对时间要求严格的应用场景中具有重要作用。我曾参与的一个工业自动化控制项目就采用了实时操作系统。在这个项目中,需要对多个传感器的数据进行实时采集和处理,并根据采集到的数据及时控制执行机构的动作。实时操作系统能够提供确定性的响应时间,确保关键任务在规定的时间内完成。 使用实时操作系统的

一些其他面试题

阿里二面:那你来说说定时任务?单机、分布式、调度框架下的定时任务实现是怎么完成的?懵了。。_哔哩哔哩_bilibili 1.定时算法 累加,第二层每一个格子是第一层的总时间400 ms= 20 * 20ms 2.MQ消息丢失 阿里二面:高并发场景下引进消息队列有什么问题?如何保证消息只被消费一次?真是捏了一把汗。。_哔哩哔哩_bilibili 发送消息失败

zookeeper相关面试题

zk的数据同步原理?zk的集群会出现脑裂的问题吗?zk的watch机制实现原理?zk是如何保证一致性的?zk的快速选举leader原理?zk的典型应用场景zk中一个客户端修改了数据之后,其他客户端能够马上获取到最新的数据吗?zk对事物的支持? 1. zk的数据同步原理? zk的数据同步过程中,通过以下三个参数来选择对应的数据同步方式 peerLastZxid:Learner服务器(Follo

java常用面试题-基础知识分享

什么是Java? Java是一种高级编程语言,旨在提供跨平台的解决方案。它是一种面向对象的语言,具有简单、结构化、可移植、可靠、安全等特点。 Java的主要特点是什么? Java的主要特点包括: 简单性:Java的语法相对简单,易于学习和使用。面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态。跨平台性:Java的程序可以在不同的操作系统上运行,称为"Write once,

【Kubernetes】常见面试题汇总(三)

目录 9.简述 Kubernetes 的缺点或当前的不足之处? 10.简述 Kubernetes 相关基础概念? 9.简述 Kubernetes 的缺点或当前的不足之处? Kubernetes 当前存在的缺点(不足)如下: ① 安装过程和配置相对困难复杂; ② 管理服务相对繁琐; ③ 运行和编译需要很多时间; ④ 它比其他替代品更昂贵; ⑤ 对于简单的应用程序来说,可能不

【附答案】C/C++ 最常见50道面试题

文章目录 面试题 1:深入探讨变量的声明与定义的区别面试题 2:编写比较“零值”的`if`语句面试题 3:深入理解`sizeof`与`strlen`的差异面试题 4:解析C与C++中`static`关键字的不同用途面试题 5:比较C语言的`malloc`与C++的`new`面试题 6:实现一个“标准”的`MIN`宏面试题 7:指针是否可以是`volatile`面试题 8:探讨`a`和`&a`

Laravel 面试题

PHP模块 PHP7 和 PHP5 的区别,具体多了哪些新特性? 性能提升了两倍 结合比较运算符 (<=>) 标量类型声明 返回类型声明 try…catch 增加多条件判断,更多 Error 错误可以进行异常处理 匿名类,现在支持通过new class 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义 …… 了解更多查看文章底部链接 PHP7 新特性 为什么 PHP

javaScript日期相加减例子

当前时间加上2天 var d = new Date(“2015-7-31”); d.setDate(d.getDate()+2); var addTwo=d.getFullYear()+”年”+(d.getMonth()+1)+”月”+d.getDate()+”日”; “控制台输出===============”+”当前日期加2天:”+addTwo; 使用这种方法,月份也会给你计算.

【吊打面试官系列-Redis面试题】说说 Redis 哈希槽的概念?

大家好,我是锋哥。今天分享关于 【说说 Redis 哈希槽的概念?】面试题,希望对大家有帮助; 说说 Redis 哈希槽的概念? Redis 集群没有使用一致性 hash,而是引入了哈希槽的概念,Redis 集群有 16384 个哈希槽,每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽, 集群的每个节点负责一部分 hash 槽。