来个算法题活动下大家的大脑!

SuperTyro 2008-06-17 09:00:52
这个题目是这样的: 需要将 中文的数字字符串 经过转换为数字
也就是说 一万二千三百四十五 结果为 12345 是这样的 比比谁的算法最效率!
...全文
636 101 打赏 收藏 转发到动态 举报
写回复
用AI写文章
101 条回复
切换为时间正序
请发表友善的回复…
发表回复
tuzhengqou 2008-06-22
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 okin1 的回复:]
学习了,收藏一下~~~~~~~~~~~~~~
[/Quote]
SuperTyro 2008-06-21
  • 打赏
  • 举报
回复
[Quote=引用 96 楼 fuadam 的回复:]
引用 95 楼 allen303allen 的回复:
类似浙大校赛javaman出的一道题,分三段考虑直接模拟就是,简单题啊。

关键你算法速度要快,先比我的算法快再说
[/Quote]
目前 最快的算法 就是 fuadam 的 如果周末前 再没有更快的代码的话
周末结贴
nec_5499 2008-06-21
  • 打赏
  • 举报
回复
SSXYC 2008-06-21
  • 打赏
  • 举报
回复
俺在项目里用过,打印报表时要123456转换成壹拾贰万叁仟...
fuadam 2008-06-20
  • 打赏
  • 举报
回复
SuperTyro:
我的代码在你机器上跑了吗,效果怎么样
fuadam 2008-06-20
  • 打赏
  • 举报
回复
[Quote=引用 95 楼 allen303allen 的回复:]
类似浙大校赛javaman出的一道题,分三段考虑直接模拟就是,简单题啊。
[/Quote]
关键你算法速度要快,先比我的算法快再说
allen303allen 2008-06-20
  • 打赏
  • 举报
回复
类似浙大校赛javaman出的一道题,分三段考虑直接模拟就是,简单题啊。
DongloveRen 2008-06-20
  • 打赏
  • 举报
回复
恩,对.昨天做了之后帖代码,提示回复内容太长.
后面的实现也跟上面差的不多.
else
{
switch()
{
case '':
....
..........
......
}
SuperTyro 2008-06-20
  • 打赏
  • 举报
回复
[Quote=引用 93 楼 sz7093948 的回复:]
不错,值得学习哦
楼主想法不错,但这个在哪一方面会用到这个数据啊
[/Quote]

中文的数值转换 的用处 很多的 这只是一个简单的例子

来个实际的例子就是 我们去银行添单子的时候 写的都是大写的汉字数字 这样的

这种去求仔细想想 用到的地方 还是很多的...

编程源自生活...
SuperTyro 2008-06-20
  • 打赏
  • 举报
回复
楼上的代码 好像没有贴全。。。
sz7093948 2008-06-20
  • 打赏
  • 举报
回复
不错,值得学习哦
楼主想法不错,但这个在哪一方面会用到这个数据啊
fuadam 2008-06-20
  • 打赏
  • 举报
回复
我觉得用字符串方式处理就是慢
SuperTyro 2008-06-20
  • 打赏
  • 举报
回复
[Quote=引用 90 楼 fuadam 的回复:]
SuperTyro:
我的代码在你机器上跑了吗,效果怎么样
[/Quote]

你的代码 在我的机器上 跑起来是 380-400 左右
我的代码 根本追不上...
DongloveRen 2008-06-19
  • 打赏
  • 举报
回复
private void button1_Click(object sender, EventArgs e)
{
string _bigNumber = textBox1.Text;
string _smallNumber = "";
int j=0;
long sum=0;

for (int i = 0; i < _bigNumber.Length; i++)
{
if (_bigNumber[i] == '亿')
{
long partSum = 0;
long[] flag = new long[i - 1];
for (j = 0; j < i; j++)
{
switch (_bigNumber[j])
{
case '一':
flag[j] = 1;
break;
case '二':
flag[j] = 2;
break;
case '三':
flag[j] = 3;
break;
case '四':
flag[j] = 4;
break;
case '五':
flag[j] = 5;
break;
case '六':
flag[j] = 6;
break;
case '七':
flag[j] = 7;
break;
case '八':
flag[j] = 8;
break;
case '九':
flag[j] = 9;
break;
case '亿':
flag[j] = 100000000;
break;
case '万':
flag[j] = 10000;
break;
case '千':
flag[j] = 1000;
break;
case '百':
flag[j] = 100;
break;
case '十':
flag[j] = 10;
break;
default:
j++;
break;
}
}
for (int k = 0; k < j; k++)
{
if (flag[k] >= 10)
{
partSum += flag[k - 1] * flag[k];
}
else if ((k == j - 1) && (flag[k] < 10))
{
partSum += flag[k];
}
}
sum += partSum * 100000000;
}
else if (_bigNumber[i] == '万')
{
long partSum = 0;
long[] flag = new long[i - j - 1];
for (int k = 0; k < i - j - 1; k++)
{
switch (_bigNumber[k])
{
case '一':
flag[k] = 1;
break;
case '二':
flag[k] = 2;
break;
case '三':
flag[k] = 3;
break;
case '四':
flag[k] = 4;
break;
case '五':
flag[k] = 5;
break;
case '六':
flag[k] = 6;
break;
case '七':
flag[k] = 7;
break;
case '八':
flag[k] = 8;
break;
case '九':
flag[k] = 9;
break;
case '千':
flag[j] = 1000;
break;
case '百':
flag[j] = 100;
break;
case '十':
flag[j] = 10;
break;
default:
j++;
break;
}
}
for (int k = 0; k < i - j - 1; k++)
{
if (flag[k] >= 10)
{
partSum += flag[k - 1] * flag[k];
}
else if ((k == j - 1) && (flag[k] < 10))
{
partSum += flag[k];
}
}
sum += partSum * 10000;
}
else//千
{
}
Janyue 2008-06-19
  • 打赏
  • 举报
回复
熙熙攘攘,皆为f来!
fuadam 2008-06-19
  • 打赏
  • 举报
回复
我建议大家可以把代码统一发给SuperTyro ,让他下测下速度,然后公布大家的成绩。不要再在这个帖子里贴代码了,看着太乱,而且打开的速度也太慢
SuperTyro 2008-06-19
  • 打赏
  • 举报
回复
你跑跑 funadam 的算法看看

他的速度 目前好象是最快的
还有就是 清洁工大哥那代码 好象也很简洁的
s330481 2008-06-19
  • 打赏
  • 举报
回复
分配了1G内存的虚拟机上,上面Oracle9i sql2005 什么的装了一大堆,所以速度慢点哈
我自己的代码不是还跑了2000多ms么。。。。。
看不过去了,所以把你的代码跑下参照一下速度
fuadam 2008-06-19
  • 打赏
  • 举报
回复
用24楼测试数据测三次 2094ms 2171ms 2144ms
24楼的代码在我机子上耗时1450ms左右
==========================================
什么配置机器,是release下吗
shadowgreen 2008-06-19
  • 打赏
  • 举报
回复
有意思,可惜我不会啊~!
我真的是太菜·····
加载更多回复(80)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧