一个算法一个遗憾

来源:互联网 发布:plc编程网站 编辑:程序博客网 时间:2024/04/28 07:35

  好长时间都没写过算法类的程序,感觉比较不舒服.今天在网上看到了个题目,但实现之后还有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();        }    }}

遗憾的就是在运行的时候,编译器提示:

                             算术运算导致溢出。