博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法-大整数加法
阅读量:5956 次
发布时间:2019-06-19

本文共 3064 字,大约阅读时间需要 10 分钟。

注意这里是整数,浮点数需要额外的操作,实现大整数的加减,三个栈就OK了,两个运算整数栈,一个结果栈,基本的逻辑的就是利用栈的先入后出的特点将高位push到栈底,低位push到栈顶,之后两个栈pop出来之后push到结果栈,结果栈pop出来就是我们想要的结果。

Stack.h:

@interface Stack : NSObject//栈顶的元素@property  (strong,nonatomic) Node  *first;@property  (assign,nonatomic) NSInteger  count;-(BOOL)isEmpty;-(NSInteger)size;-(void)push:(NSString *)value;-(NSString *)pop;-(void)remove:(NSString *)value;@end

Stack.m代码:

@implementation Stack-(BOOL)isEmpty{    return self.count==0;}-(NSInteger)size{    return self.count;}-(void)push:(NSString *)value{    Node  *oldFirst=self.first;    self.first=[[Node alloc]init];    self.first.value=value;    self.first.next=oldFirst;    self.count=self.count+1;}-(NSString *)pop{    if (!self.first) {        return [NSString stringWithFormat:@"-1"];    }    NSString *value=self.first.value;    self.first=self.first.next;    self.count=self.count-1;    return value;}-(void)remove:(NSString *)value{    if ([self.first.value isEqualToString:value]) {        self.first=self.first.next;        self.count=self.count-1;    }else{        Node *node=self.first;        while (node.next) {            if ([node.next.value isEqualToString:value]){                if (node.next.next) {                    Node *tempNode=node.next.next;                    node.next=tempNode;                }else{                    node.next=NULL;                }                self.count=self.count-1;                break;            }else{                node=node.next;            }                   }    }}@end

进入重点了,整数的加减在StackSum.h中实现:

@interface StackSum : NSObject-(NSInteger)sum:(NSInteger)firstNumber  secondNumber:(NSInteger)secondNumber;@end

StackSum.m中的代码:

@implementation StackSum//原文地址:http://www.cnblogs.com/xiaofeixiang-(NSInteger)sum:(NSInteger)firstNumber secondNumber:(NSInteger)secondNumber{    //第一个整数的栈    Stack  *firstStack=[self getStackByNumber:firstNumber];    //第二个整数的栈    Stack  *secondStack=[self getStackByNumber:secondNumber];    //结果栈    Stack  *resultStack=[[Stack alloc]init];    NSInteger  flag=0;//进位标记        while (firstStack.count>0&&secondStack.count>0) {        NSInteger  temp=[firstStack.pop integerValue]+[secondStack.pop integerValue]+flag;        [resultStack push:[NSString stringWithFormat:@"%ld",temp%10]];        flag=temp/10;    }    //第一个数字大于第二字数字的情况    while (firstStack.count>0) {        NSInteger  temp=[firstStack.pop integerValue]+flag;        [resultStack push:[NSString stringWithFormat:@"%ld",temp%10]];        flag=temp/10;    }    //第二个数字大于第一个数字    while (secondStack.count>0) {        NSInteger  temp=[secondStack.pop integerValue]+flag;        [resultStack push:[NSString stringWithFormat:@"%ld",temp%10]];        flag=temp/10;    }    //标记位有进位    if (flag) {        [resultStack push:[NSString stringWithFormat:@"%ld",flag]];    }    NSInteger  count=resultStack.count;    NSString  *str=@"";    //正序输出即为结果    for (NSInteger i=0; i

 简单的测试:

StackSum  *sum=[[StackSum alloc]init];    NSLog(@"大整数相加的结果为:%ld", [sum sum:9999999 secondNumber:888]);    NSLog(@"iOS技术交流群:228407086");

结果如下:

随机附赠iOS技术交流群:228407086~

你可能感兴趣的文章
取得内表的数据数
查看>>
在一个程序中调用另一个程序并且传输数据到选择屏幕执行这个程序
查看>>
“=” “:=” 区别
查看>>
pwnable.kr lotto之write up
查看>>
python之UnittTest模块
查看>>
HDOJ_ACM_Rescue
查看>>
笔记纪录
查看>>
jsp当参数为空的时候默认显示值
查看>>
《C#线程参考手册》读书笔记(三):.NET中的线程池
查看>>
PL/SQL程序设计 第四章 游标的使用
查看>>
如何理解lower_bound/upper_bound
查看>>
有穷的自动机构造
查看>>
下拉放大设计思路
查看>>
Qt5设置应用程序图标及程序的发布
查看>>
HTTP首部(2)
查看>>
LA 5031 图询问
查看>>
django-分页器
查看>>
idea超炫的自定义模板
查看>>
sql server根据表中数据生成insert语句
查看>>
S3上备份的json文件转存成parquet文件
查看>>