【发布时间】:2021-06-03 21:25:59
【问题描述】:
对于这个问题,我需要在一个较大的数字中找到最大的三位数字。
示例测试用例 1:
534535
输出:
535
示例测试用例 2:
23457888976
输出:
976
我试过以下代码:
#include <iostream>
using namespace std;
int main() {
int num;
cin>>num;
int len= to_string(num).length();
int arr[10],lnum=0,max=0;
for (int i =len-1;i>=0;i--)
{
arr[i] = num%10;
num =num/10; //to convert int into array
}
for (int i=0;i<len-2;i++)
{
if (arr[i] >arr[i+1])
lnum = arr[i]*100+arr[i+1]*10+arr[i];
if (lnum>max)
max= lnum;
}
cout<<max;
return 0;
}
尽管此代码似乎适用于测试用例 1,但它不适用于大多数输入。
(也请帮忙。)
1. 这仅适用于 10 位数字(同样,大多数输出错误)。如果数字较大怎么办?
2.有没有更好的方法将整数转换成数组?或者字符串数组会以类似的方式工作吗?
3.真的很慢,谁能帮我弄清楚如何加快速度?
谢谢你的帮助 !!
【问题讨论】:
-
将它们分析为字符串而不是数字。它更简单,产生错误的可能性更小
-
使用滑动窗口算法
-
提示:
n % 1000提取n的最右边三位数字。n /= 10删除n的最后一位数字。不要忘记考虑否定n的情况。你的测试用例是邪恶的——两个最大的数字都在最后。多做一些测试。另一个注意事项:考虑到无论如何您都是从标准输入加载,使用字符串方法可能不是一个坏主意。 -
@IWonderWhatThisAPIDoes thnx,你能帮我写代码吗?
-
当然,你在哪里卡住了? ;)