一、 统一处理进位
-(NSString*)bidnumbstring:(NSString*)muti1 multibyaBignumString:(NSString*)muti2{
if (muti1.length==0 || muti2.length==0) {
return @"0";
}
NSInteger capcity = muti1.length + muti2.length;
NSMutableArray<NSNumber *> *arr = [NSMutableArray array];
for (int i = 0; i < capcity; i++) {
[arr addObject:@0];
}
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wshorten-64-to-32"
for (int i = muti1.length - 1; i >= 0; i--) {
for (int j = muti2.length - 1; j >= 0 ; j--) {
NSInteger singleMuti1 = [[muti1 substringWithRange:NSMakeRange(i, 1)] integerValue];
NSInteger singleMuti2 = [[muti2 substringWithRange:NSMakeRange(j, 1)] integerValue];
NSInteger sum = singleMuti1 * singleMuti2;
NSInteger index = (muti1.length - 1 - i) + (muti2.length - 1 - j);
arr[index] = @([arr[index] integerValue] + sum);
int index = 0;
while (index < capcity - 1) {
NSInteger tmp = [arr[index] integerValue];
arr[index] = @(tmp % 10);
arr[index + 1] = @([arr[index + 1] integerValue] + tmp / 10);
index++;
}
NSArray *reverseArr = [[arr reverseObjectEnumerator] allObjects];
return [reverseArr componentsJoinedByString:@""];
#pragma clang diagnostic pop
}
二、 实时处理进位
-(NSString*)bidnumbstring:(NSString*)muti1 multibyaBignumString:(NSString*)muti2{
if (muti1.length==0 || muti2.length==0) {
return @"0";
}
NSInteger capcity = muti1.length + muti2.length;
NSMutableArray<NSNumber *> *arr = [NSMutableArray array];
for (int i = 0; i < capcity; i++) {
[arr addObject:@0];
}
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wshorten-64-to-32"
for (int i = muti1.length - 1; i >= 0; i--) {
for (int j = muti2.length - 1; j >= 0 ; j--) {
NSInteger singleMuti1 = [[muti1 substringWithRange:NSMakeRange(i, 1)] integerValue];
NSInteger singleMuti2 = [[muti2 substringWithRange:NSMakeRange(j, 1)] integerValue];
NSInteger sum = singleMuti1 * singleMuti2;
NSInteger index = (muti1.length - 1 - i) + (muti2.length - 1 - j);
do {
sum += [arr[index] integerValue];
arr[index] = @(sum % 10);
if (index + 1 >= capcity) {
break;
}
arr[index + 1] = @([arr[index + 1] integerValue] + sum / 10);
index++;
sum = 0;
} while ([arr[index] integerValue] >= 10);
}
NSArray *reverseArr = [[arr reverseObjectEnumerator] allObjects];
return [reverseArr componentsJoinedByString:@""];
#pragma clang diagnostic pop
}