输入一个数字,从其中删除一位使得余下的数字是最大的,并输出。C语言实现
展开全部
从高位向低位循环,让该位最大即可,遇到低位数字更大的删除。
测试:
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;
}
测试:
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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
*/
#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;
}
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;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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++;
}
}
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++;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
12345
2345
#include <stdio.h>
main()
{
char *p,num[10]="\0";
p=num;
gets(num);
while (*p++)
{
printf("%c",*p);
}
}
2345
#include <stdio.h>
main()
{
char *p,num[10]="\0";
p=num;
gets(num);
while (*p++)
{
printf("%c",*p);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询