这是我用来计算第一个数字i和第二个数字j之间所有连续数字之和的代码。
-(void)downloadPdfBtnPressed:(id)sender
{
NSString *dowloadURL = [DownloadUrlArray objectAtIndex:[sender tag ]];
NSString *filename =[dowloadURL lastPathComponent];
NSString *stringPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"/PDFDownload"];
if (![[NSFileManager defaultManager] fileExistsAtPath:stringPath])
[[NSFileManager defaultManager] createDirectoryAtPath:stringPath withIntermediateDirectories:NO attributes:nil error:nil];
NSData *pdfData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:dowloadURL]];
if(pdfData)
{
stringPath = [stringPath stringByAppendingPathComponent:filename];
[pdfData writeToFile:stringPath atomically:YES];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"PDF"
message:@"PDF file is downloaded"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
}
但是对于输入
输入
99 1000000000000
我收到了输出
499999999999499999995149
而不是正确的输出
500000000000499999995149
我哪里错了?
答案 0 :(得分:9)
你的代码是正确的,问题是你输入了一个奇数和一个偶数,这使得k = i.add(j)
中的k是一个奇数,不能被截断而不能截断!
所以BigInteger m = k.divide(BigInteger.valueOf(2));
中的m被舍入,这使得你的计算中有1个单位的变化。
只需查看正确的答案,并将其与您的程序打印出的答案进行比较。你有一个1 * 1000000000000(第二个输入值)偏差。这说明问题本身。
如果您输入两个偶数或两个奇数,您的程序将工作并打印正确的答案。
我希望这足以让你找到纠正你的程序的方法,以防偶数和奇数作为输入。