ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

大数减法运算

2022-02-11 11:02:58  阅读:188  来源: 互联网

标签:NSInteger 运算 大数 str2 str1 NSString length 减法 muString2


标题 大数减法运算

/**
*大数减法运算
**/
-(NSString *)reductionActionString:(NSString *)str1 andString:(NSString *)str2{

NSMutableString *muString1 = [[NSMutableString alloc] init];
NSMutableString *muString2 = [[NSMutableString alloc] init];

//正负数判断
NSString *negative = @"";

//如果相加的两个数的长度不一样 则通过补0补成长度一样的
if (str1.length > str2.length) {
    
    NSInteger count = str1.length - str2.length;
    
    NSInteger i = 0;
    while (i < count) {
        
        //在指定下标 index 插入一个字符串
        [muString2 insertString:@"0" atIndex:i];
        i++;
    }
    
    [muString1 appendString:str1];
    [muString2 appendString:str2];
    
}else if (str1.length < str2.length){
    
    NSInteger count = str2.length - str1.length;
    
    NSInteger i = 0;
    while (i < count) {
        
        //在指定下标 index 插入一个字符串
        [muString2 insertString:@"0" atIndex:i];
        i++;
    }
    
    [muString1 appendString:str2];
    [muString2 appendString:str1];
    negative = @"-";
}else{
    //长度相等时,从首位到末尾逐步判断大小
    NSInteger i = 0;
    while (i < str1.length) {
        
        //取出当前需要判断的数据
        NSString *number1 = [str1 substringWithRange:NSMakeRange(i, 1)];
        NSString *number2 = [str2 substringWithRange:NSMakeRange(i, 1)];
        
        NSInteger sub1 = [number1 integerValue];
        NSInteger sub2 = [number2 integerValue];
        
        if(sub1 < sub2){
            negative = @"-";
            break;
        }
        i++;
    }
    
    if ([negative isEqualToString:@"-"]) {
        [muString1 appendString:str2];
        [muString2 appendString:str1];
    }else{
        [muString1 appendString:str1];
        [muString2 appendString:str2];
    }
    
}

NSMutableString *numberString = [[NSMutableString alloc] init];
if (muString1.length == muString2.length) {
    NSInteger i = 0;
    NSUInteger borrow = 0;
    
    while (i < muString1.length) {
        
        //取出当前需要计算的数据
        NSString *str1 = [muString1 substringWithRange:NSMakeRange(muString1.length -1 -i, 1)];
        NSString *str2 = [muString2 substringWithRange:NSMakeRange(muString2.length -1 -i, 1)];

        NSInteger sub1 = [str1 integerValue];
        NSInteger sub2 = [str2 integerValue];
        
        //判断当前位数是否被借1
        if (borrow == 1) {
            sub1 = sub1 -1;
        }
        
        NSInteger number = 0;
        if(sub1 < sub2){
            //如果被减数大于减数,则向高位借一
            number = sub1 + 10 - sub2;
            borrow = 1;
            
        }else{
            number = sub1 - sub2;
            borrow = 0;
        }
        
        [numberString insertString:[NSString stringWithFormat:@"%ld",(long)number] atIndex:0];
        
        i++;
    }
}

//去掉无效的0
NSInteger k = 0;
NSInteger numberLength = numberString.length;
while (k < numberLength -1) {
    
    NSString *str1 = [numberString substringWithRange:NSMakeRange(0, 1)];
    
    if ([str1 integerValue] == 0) {
        //去掉无效的0
        [numberString deleteCharactersInRange:NSMakeRange(0, 1)];
    }else{
        break;
    }
    k++;
}

return [NSString stringWithFormat:@"%@%@",negative,numberString];

}

标签:NSInteger,运算,大数,str2,str1,NSString,length,减法,muString2
来源: https://blog.csdn.net/qq_39242343/article/details/122875931

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有