好长时间都没写过算法类的程序,感觉比较不舒服.今天在网上看到了个题目,但实现之后还有Bug,很遗憾.
算法题目:需要将 中文的数字字符串 经过转换为数字 也就是说 一万二千三百四十五 结果为 12345 是这样的
我的C#代码:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;
namespace MyFirstWindowFormsProgram { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
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 { 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; } } textBox2.Text = sum.ToString(); } } }
遗憾的就是在运行的时候,编译器提示:
算术运算导致溢出。