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

  题目如上,例子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[]。

 1 #include<iostream>
 2 using namespace std;
 3 
 4 
 5 void fun(const int num[],int len,int v_max[],int c,int max_i,int num_i)
 6 {
 7     if(max_i==c) return;
 8     int j=num_i;
 9     int temp=-1;
10     for( ;j<=len-c+max_i;j++){
11         if(temp<num[j]){
12             temp=num[j];
13             num_i=j;
14         }
15     }
16     v_max[max_i]=temp;
17     fun(num,len,v_max,c,++max_i,++num_i);    
18 }
19 int main()
20 {
21     int v,c,num[100],v_max[100],len; //len为整数v的位数,v_max[]保存最大数 
22     v=223123214;
23     int v1=v;
24     len=0;
25     
26     while(v1>0){    /*将整数v按位存入数组num[]*/ 
27         num[len++]=v1%10;
28         v1/=10;
29     }    
30     for(int i=0;i<len/2;i++)
31         swap(num[i],num[len-1-i]);
32         
33     cout<<"v="<<v<<endl;
34     while(cin>>c){
35         if(c>len){
36             cout<<"error:v<10^c"<<endl;
37         }
38         else{
39 
40             fun(num,len,v_max,c,0,0);
41             for(int i=0;i<c;i++)
42                 cout<<v_max[i];
43             cout<<endl;
44         }
45     }
46 
47 }
原文地址:https://www.cnblogs.com/johnleo/p/v_c_max_num.html