整数去位
题目描述
键盘输入一个高精度的正整数N,去掉其中任意M个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和M寻找一种方案使得剩下的数字组成的新数最小。输出组成的新的正整数。
输入数据均不需判错。如果去掉了某几个位后得到的新整数开头为0,保留0。
输入:
505
1
输出:
05
输入
第一行为高精度正整数N(N的长度不超过10^6位)
第二行为M(0<=M<=N的长度)
输出
去掉M位后的最小新数。
样例输入
82386782 3
样例输出
23672
提示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#include<iostream> #include<string> using namespace std; int main() { string a; int k,i=0,j; bool pd=false; cin>>a>>k; int l=a.length(); while(k>0) { for(j=i+1;j<=i+k;j++) if(a[j]<a[i]){k-=j-i;i=j;pd=true;break;} if(!pd){cout<<a[i];i++;} else pd=false; } while(i<l) { cout<<a[i]; i++; } //system("pause"); return 0; } |
输入输出改了似乎也快不了
不知道大神都怎么做的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int main() { char str[1000001]; int a[1000001],k,i=0,j; bool pd=0; scanf("%s%d",str,&k); int l=strlen(str); for(int i=0;i<l;i++)a[i]=str[i]-'0'; while(k>0) { for(j=i+1;j<=i+k;j++) if(a[j]<a[i]){k-=j-i;i=j;pd=1;break;} if(!pd){printf("%d",a[i]);i++;} else pd=0; } while(i<l) { printf("%d",a[i]); i++; } return 0; } |
作为一个初一学弟,话说今年czhou有讲的
太神了!
也得啊