一个长整数串去除m位使其最大

news/2024/7/24 2:46:51

要求:输入一个长串整数,小于240位,去除其中的位然后使这个数最大

一种错误的解法:遍历这个字符串,删除其最小的m位。

如128953,去除3位,若按上面的算法,则为895,之所以是错的,因为953比895大。

所以一种正确的算法如下:

1.原字符串长度为n,删除m个,最终为n-m

2最终的字符串以大字符为排头,即从大到小(c:9-->0)开始查找字符,并计算其后的字符串长度,若大于n-m,则说明这个字符要输出,若长度小于n-m,则它不能作为开头,从而查看下一个比较小的。

3.每输出一个字符,把输出长度减一,并下一次从它的后面开始搜索,同时c也从9开始,重复2

4.重复3,直到最终长度n-m为0;

/* Note:Your choice is C IDE */
#include "stdio.h"
#include<assert.h>
#include<string.h>
/**	输入一个长串整数,小于240位,去除其中的n位然后使这个数最大 */
void Del_m_to_max(char *src,int m,char *dest)
{
	int n;
	int output_len;//剩余输出的长度
	int curlen;//现有的长度;
	char c;
	char *p,*cur=src;
	assert(src!=NULL&&dest!=0);
	n=strlen(src);	
	assert(n>m);
	output_len=n-m;
	
	*dest='\0';
	while(output_len>0)//output_len=0时,则输出
	{
		for(c='9';c>='0'&&output_len>0;)
		{
			p=strchr(cur,c);
			if(NULL==p)//没有大字符,看次大字符
			{
				c--;
				continue;
			}
			curlen=strlen(p);
			if(curlen<output_len)//长度不够了,
			{
				c--;
				continue;
			}
			/*加入这个elseif可以少好一些判断,而不是每个字符都要判断。*/
			else if(curlen==output_len)
			{
				*dest='\0';
				strcat(dest,p);
				output_len=0;
				break;
			}
			else
			{
				//printf("in\n");
				*(dest++)=*p;
				output_len--;
				cur=p+1;
				c='9';//下一个字符,又要从头开始。					
			}
					
		}		
	}
	//if()*dest='\0';		
}

void main()
{
   char buf[]="83179254297017652";//"128953";
  // 128953
   char dest[240];   
	Del_m_to_max(buf,10,dest);
	printf("%s\n",dest);  
}


9977652



             Press any key to continue

转载请标明出处: http://blog.csdn.net/lin200753/article/details/27851137


http://www.niftyadmin.cn/n/1609302.html

相关文章

雷锋读图:社交网站上的男女之战(男人输了)

现实生活中&#xff0c;我们时常听到一个词&#xff1a;男女有别。而在虚拟的社交网站上&#xff0c;其实也存在着类似的现象&#xff0c;因为男人和女人在用户习惯上真的有很大区别。对于Facebook和Twitter两大社交网站来说&#xff0c;女性用户是主流&#xff0c;而且她们在更…

Ubuntu One Files for Android:Ubuntu One(类似于DropBox)专用的云存储客户端软件

Ubuntu One云存储服务类似于DropBox&#xff0c;不开源。免费申请帐号有几个GB的存储空间。 免费在Ubuntu One申请账户&#xff0c;在Android手机上面安装一个免费的客户端&#xff0c;你就可以和私有云进行同步文件和照片了&#xff01; Ubuntu云客户端还支持Widnows/Ubuntu/…

C中double到int的转换、四舍五入

在一般的PC平台下sizeof(double)&#xff1d;8&#xff0c;即它是8字节的&#xff0c;同时它是双精度浮点型&#xff0c;而float是单精度的。先把它们的基础知识复习一下&#xff0c;有些有点忘了。 1.double类型的数在C中的正确输入、输出怎么表示&#xff1f; %lf表示双精度…

友名片:疑似“人工识别”的云名片识别应用

近日&#xff0c;商务社交应用“友联系”的开发者友录团队推出了最新名片识别应用“友名片”&#xff0c;向用户提供免费的名片管理服务。所有的名片将会上传至云服务器进行识别和备份&#xff0c;而且友名片使用者之间可以快速交换自己的电子名片&#xff0c;并支持多种语言识…

除法运算的注意点

看<c陷阱与缺陷>这本书是看到除法运算截断问题&#xff1a;(书中所说的截断是&#xff0c;余数与除数同号,但现实中并不是这样的。)。 先来看一下下面的运行结果&#xff1a; /* Note:Your choice is C IDE */ #include "stdio.h" void main() {int a5;int b3…

微信4.2版本雷锋网抢先独家评测 支持视频和语音通话

微信4.2版本目前正处于内测阶段&#xff0c;雷锋网有幸拿到了最新版本的iOS微信安装文件&#xff0c;小编第一时间试用发现新版本的微信的确很强大&#xff0c;除支持视频和语音通话外&#xff0c;微信4.2还支持网页版&#xff0c;不过网页版微信必须基于手机版才能登陆&#x…

在Ubuntu上安装Ruby 1.9.2

首先&#xff0c;2012年了&#xff0c;已经有了Ruby 1.9.3&#xff0c;为什么我要安装1.9.2&#xff1f; 答案&#xff1a;因为我在学习Ruby on Rails&#xff0c;参考书Ruby on Raisl 3 Tutorial是根据1.9.2写的&#xff1b;而且heroku服务器看样子目前只支持Ruby 1.9.2 启…

Pinterest与日本电子商务巨头乐天强强联手

今年5月&#xff0c;日本电子商务巨头乐天向Pinterest投资1亿美元&#xff0c;最近双方开始开展进一步合作&#xff0c;乐天在日本的三个服务项目Rakuten Ichiba&#xff0c;Rakuten Travel和Rakuten Recipe 上都增加了‘Pin It’按钮&#xff0c;这样用户也可以使用Pinterest分…