您的位置:首页 > 其它

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

2016-12-10 00:00 246 查看
  题目如上,例子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 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐