整数v,从高位到低位,取c位数,得到最大数 (其中:v>=10^c)

时间:2023-03-08 15:46:29

  题目如上,例子v=22312324,c=3,求得最大数为334。

  用自己的想法实现了一遍,如果你有更好的方法的话,欢迎不吝赐教。

我的思路是,先将整数v按位存入一个数组,数组低位为整数高位,如num[]={2,2,3,1,2,3,2,4}。求得最大数有c位数,v_max[]={……}。

每次从数组num[]取得一位最大数,存入v_max[]相应位。如求v_max[0],因为v_max有c位,所以可取num[0]~num[len-c-0]中的最大数(len为v的位数),记录最大数下标为num_i,再求v_max[1],可取num[num_i+1]~num[len-c-1]中取最大数,……如此取c个数就得到v_max[]。

 #include<iostream>
using namespace std; void fun(const int num[],int len,int v_max[],int c,int max_i,int num_i)
{
if(max_i==c) return;
int j=num_i;
int temp=-;
for( ;j<=len-c+max_i;j++){
if(temp<num[j]){
temp=num[j];
num_i=j;
}
}
v_max[max_i]=temp;
fun(num,len,v_max,c,++max_i,++num_i);
}
int main()
{
int v,c,num[],v_max[],len; //len为整数v的位数,v_max[]保存最大数
v=;
int v1=v;
len=; while(v1>){ /*将整数v按位存入数组num[]*/
num[len++]=v1%;
v1/=;
}
for(int i=;i<len/;i++)
swap(num[i],num[len--i]); cout<<"v="<<v<<endl;
while(cin>>c){
if(c>len){
cout<<"error:v<10^c"<<endl;
}
else{ fun(num,len,v_max,c,,);
for(int i=;i<c;i++)
cout<<v_max[i];
cout<<endl;
}
} }