输入一个数字,从其中删除一位使得余下的数字是最大的,并输出。C语言实现

12345去掉1得2345;4541014去掉高位4得54101... 12345 去掉1 得 2345;
4541014 去掉高位4 得 54101
展开
 我来答
sparkaround
2012-04-12 · TA获得超过3508个赞
知道大有可为答主
回答量:1522
采纳率:0%
帮助的人:894万
展开全部
从高位向低位循环,让该位最大即可,遇到低位数字更大的删除。

测试:
12345
2345

87612
8762

4541014
541014

代码:

#include <stdio.h>
int main(int argc, char **argv)
{
int m;
int i, j;
int len;
int factor;
char digits[32];

scanf("%d:", &m);

len = 0;
while(m){
if(len >= sizeof(digits)){
fprintf(stderr, "不应该发生的错误,数字过大!\n");
}
digits[len] = m % 10;
m /= 10;
len ++;
}

if(len < 2) {
printf("至少两位数!\n");
return 1;
}

/* 从最高位向最低位调整 */
for(i = len - 1; i > 0; i --){
/* 用大的数字占据高位, 除去digits[i] */
if(digits[i] < digits[i - 1]) break;
}
m = 0;
factor = 1;
for(j = 0; j < len; j++){
if(j == i) continue;
m += digits[j] * factor;
factor *= 10;
}
printf("%d\n", m);
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
好吃的人Bp
2012-04-12 · TA获得超过224个赞
知道小有建树答主
回答量:95
采纳率:0%
帮助的人:131万
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int search(int j);
int main()
{
int i;
printf("请输入一个数 \n");
scanf("%d", &i);
printf("删除前: %d\n", i);
i = search(i);
printf("删除后: %d\n", i);
return 0;
}

int search(int j)
{
char szTmp[100] = {0};
char szTmp2[100] = {0};
int ilenth, imax, i, k, index, itmp;
ilenth = imax = i = k = index = itmp = 0;
sprintf(szTmp, "%d", j);
ilenth = strlen(szTmp);
if (ilenth > 1)
{
for (i = 0; i < ilenth; i++)
{
index = 0;
for (k = 0; k < ilenth; k++)
{
if (i != k)
{
szTmp2[index++] = szTmp[k];
}
}
itmp = atol(szTmp2);
imax = (itmp >= imax) ? itmp : imax;
}
}
return imax;
}
// 测试通过
/*
请输入一个数
12345
删除前: 12345
删除后: 2345
Press any key to continue
*/
/*
请输入一个数
454101
删除前: 454101
删除后: 54101
Press any key to continue
*/
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-04-13
展开全部
#include <stdio.h>

int main(void)
{
int in;
int i, j;
int len = 0;
int factor;
char digits[32];

scanf("%d:", &in);

while (in) {
if (len >= sizeof(digits)) {
fprintf(stderr, "Opps, The number is too large!\n");
}
digits[len] = in % 10;
in /= 10;
len ++;
}

if (len < 2) {
printf("At least two digits!\n");
return 1;
}

for (i = len - 1; i > 0; i --) {
if (digits[i] < digits[i - 1]) break;
}
in = 0;
factor = 1;
for (j = 0; j < len; j++) {
if(j == i) continue;
in += digits[j] * factor;
factor *= 10;
}

printf("%d\n", in);

return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lampzhou
2012-04-12 · TA获得超过707个赞
知道小有建树答主
回答量:1208
采纳率:56%
帮助的人:620万
展开全部
#include <stdio.h>
main()
{
char *p,num[20];
bool del=false;
p=num;
gets(num);
while (*p)
{
if((*p<*(p+1))&&!del)
{p++;
del=true;
continue;}
if(*(p+1)==0&&!del)
break;
printf("%c",*p);
p++;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沧海雄风2009
2012-04-12 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8525
采纳率:79%
帮助的人:2769万
展开全部
12345
2345

#include <stdio.h>
main()
{
char *p,num[10]="\0";
p=num;
gets(num);
while (*p++)
{
printf("%c",*p);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式