求任意给定数N(如:12321),计算1出现的次数(如:12321结果为2)。我现在的算法是:
intTemp = 0; //统计的个数char[] chara = N.ToString().ToCharArray(); //N是要判断的数
for (int i = 0; i < chara.Length; i++)
{
if (chara[i] == '1')
{
intTemp++;
}
}各位高手能不能给个更优的算法(要求计算时间更短)
intTemp = 0; //统计的个数char[] chara = N.ToString().ToCharArray(); //N是要判断的数
for (int i = 0; i < chara.Length; i++)
{
if (chara[i] == '1')
{
intTemp++;
}
}各位高手能不能给个更优的算法(要求计算时间更短)
解决方案 »
- 泛型统计个数
- 跪求大牛前来指点迷津 应该算是异步调用,线程访问控件? 这问题我也不知道怎么定义...
- Socket相关程序,遇到错误,VS只会停止调试
- (很急!在线等答案!)为什么我的DataGridView导出Excel只能到500多行记录?,好象超过570行记录就会出错!!!有没有更好的源代码?顺便问一下,这分数是怎么用的?
- 关于页面超时的问题
- 呵呵,大家好!最近我用Dreamweaver在服务器上做修改一个网站,却出现了一个配置错误,请大家速速帮忙解决哦
- 大家经给看看,vs开发出来的asp.net web项目如何将要用的文件和要分发的文件分开??
- 简单问题:如何查找文件?
- 高分求救,不够再加
- C# httpwebrequest 发送 cookie
- ConfigurationManager的问题
- 最能告诉我,目前来说最有前景的编程语言是什么?
char[] chara = N.ToString().ToCharArray(); //N是要判断的数
for (int i = 0; i < chara.Length; i++)
{
if (chara[i] == '1')
{
intTemp++;
}
}
和
string chara = N.ToString();
foreach(char chr in chara)
{
if (chara[i] == '1')
{
intTemp++;
}}
谁快,难说.
string chara = N.ToString();
foreach(char chr in chara)
{
if (chr == '1')
{
intTemp++;
}}
我给大家换个思路:
{
string sNumber = "1212310";
int iNumber = int.Parse(sNumber); int l = sNumber.Length;
int count =0;
while (l > 0)
{
if ((iNumber % 10) == 1) count++;
iNumber /= 10;
l--;
}
Console.WriteLine(count.ToString());
}
//输出3
如果像你那样,就不用计算机了,lz人工就可以了、、
private int getNum(string str1,char c)
{
string []strTemp;
strTemp = str1.Split(c);
return strTemp.Length-1;
}
//我也换个思路。呵呵,可能是代码最短吧,时间不一定
我给大家换个思路:
{
string sNumber = "1212310";
int iNumber = int.Parse(sNumber); int l = sNumber.Length;
int count =0;
while (l > 0)
{
if ((iNumber % 10) == 1) count++;
iNumber /= 10;
l--;
}
Console.WriteLine(count.ToString());
}
//输出3******************************
当输入的数字很大,超过int的表示范围的时候,这种方法就不适用了。
for (int i = 0; i < chara.Length; i++)
{
}
换成
int length = chara.Length;
for (int i = 0; i < length ; i++)
{
}
效率有非常大的差距,我测试过了,因为现在编译器不会对chara.Length优化,求属性是很费时的操作!!
to : fd7893(看着办吧)
如果像你那样,就不用计算机了,lz人工就可以了、、=======================================================================
不要一棍子打死嘛...
比如搜索某工资数据库里面的1的个数...说不定fd7893(看着办吧)的方法更快...
________________________________________超过int的表示范围的时候,这种方法就不适用了?
我看不见得,你把大数字拆开分别存到几个int中不就行了!
如果像你那样,就不用计算机了,lz人工就可以了、、
_____________________________________________________
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
你给我数数,一边保证不错!
不要别人换种思路,就决的不对,自己先想想再说!
我看 如果不考虑效率damofengbo() ( )的方法就很好! 简洁、方便!
我看不见得,你把大数字拆开分别存到几个int中不就行了!*********************************
我只是针对那段代码而言的
当然,把大数拆分成几个int是可行,不过得需要另外写一个大数类,耗费人力专门为解决这个问题而写一个大数类是不是得不偿失呢? 而且要是实现的不好,效率也不一定会比逐个分析字符串中的字符的方法高.
for (int i = 0,j=chara.Length-1; i < =j; i++,j--)
{
if (chara[i] == '1')
{
intTemp++;
}
if (chara[j] == '1')
{
intTemp++;
}
}
int cout(char[] chara,const char &c,int left,int right)
{
int middle=(left+right)/2;
if(left<=right)
{
if(chara[middle]==c) intTemp++;
cout(chara,c,left,middle-1);
cout(chara,c,middle+1,right);
}
else return intTemp;
}
int intTemp = 0; //统计的个数
Main()
{
~
char[] chara = N.ToString().ToCharArray(); //N是要判断的数
int len=chara.length;
char c='1';
int total;//1的总个数total=int cout( chara,c,0,len);
}
leonchenjian(小黑) ( ) 信誉:100 Blog 当然,把大数拆分成几个int是可行,不过得需要另外写一个大数类,耗费人力专门为解决这个问题而写一个大数类是不是得不偿失呢? 而且要是实现的不好,效率也不一定会比逐个分析字符串中的字符的方法高.
_________________________________________ 写一个大数类?不用吧? 大数因为过长不可能存储在int、long 等数值类型中,而肯定是存储在字符串类型中的,至于拆分string,substring()就可以搞定,转int、long方法 int.Parse()就好了。当然这样一来数值计算的优势就不存在了,因为substring()、Parse()都是字符操作,此算法的效率必定大打折扣,就算自己重写一个方法实现拆分效率亦未必高,综合来看还是得不偿失。但对于处理存储在int、long等数值型变量中的数据时我的算法有着绝对的优势。 但这些都没有什么关系,我们只是在讨论问题的解决方式吧?字符的比较写到天上不也就那么几样吗?翻来覆去也就没有了新鲜感,而我的本意只是开阔一下大家的思路,起一个抛砖引玉的作用。