欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > iOS 大数相加

iOS 大数相加

2024/10/25 10:25:57 来源:https://blog.csdn.net/wyz670083956/article/details/143028543  浏览:    关键词:iOS 大数相加

大数相加的技术点在于进位(两数相加大于10之后进位)

思路如下:

1.从右往左便利,依次去除两个数M和N的个位数、十位数、百位数~~~相加

2.如果M遍历完了,N还没完,那么M用0作为位数上的加数:

代码如下:

- (void)bigNumAdd:(NSMutableArray *)arrayA ArrayB:(NSMutableArray *)arrayB
{NSString * resString = @"";//倒叙循环int i = (int)arrayA.count - 1;int j = (int)arrayB.count - 1;//进位.两个数相加,大于10会进一位, 它的值只能是1或0int carry = 0;while (i >= 0 || j >= 0){//往右遍历,依次先取出个位数、十位数、百位数……/*三目运算法,如果i大于等于0,说明arrayA里还有值没遍历,如果arrayA里没有值了就直接赋0arrayA = [1,2,3],arrayB = [4,5,6,7], 遍历到第4遍,i=-1,j = 0,所以此时num1=0*/int num1 = i >= 0 ? [arrayA[i] intValue] : 0;int num2 = j >= 0 ? [arrayB[j] intValue] : 0;int sum = num1 + num2 + carry;if (sum >= 10){//两数相加,大于10,需保留个位数,向前进一位sum -= 10;carry = 1;}else{carry = 0;}resString = [NSString stringWithFormat:@"%d%@",sum,resString];NSLog(@"resString=11=%@",resString);//本次遍历结束之后,需要对i和j往左移动一位i--;j--;}//如果在所有的遍历都结束后,carry 还等于1.说明最后一次加法大于10,向前进1,此时我们还需要再拼接一个1if (carry == 1){resString = [NSString stringWithFormat:@"%d%@",carry,resString];}NSLog(@"最后的结果==%@",resString);
}//调用
- (void)viewDidLoad 
{[super viewDidLoad];NSString * stringA = @"123456";NSString * stringB = @"456789";[self bigNumAdd:[self stringTransArray:stringA] ArrayB:[self stringTransArray:stringB]];
}//将字符串转为数组
- (NSMutableArray *)stringTransArray:(NSString *)str
{NSMutableArray * array = [[NSMutableArray alloc]init];for (int i = 0; i < str.length; i ++){unichar ch = [str characterAtIndex:i];NSString * charStr = [NSString stringWithFormat:@"%C",ch];//添加[array addObject:charStr];}return array;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com