注意这里是整数,浮点数需要额外的操作,实现大整数的加减,三个栈就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~