那天在CSDN上看到一个网友在华为遇到的面试题是一道乘法题看似简其实并不是因为它们都超出了数据类型的范围,今天做了下加法希望对大家有所启示

 bool jw = false;//两个数加起来是否要向前进一位
    string result = "";//最后呈现的结果
    protected void Button1_Click(object sender, EventArgs e)
    {
        string s1;//将字符数组中的字符转换为单个字符串因为ToInt32的重载中没有字符只有字符串
        string s2;
        int x1;//把得到的单个字符串转换为整型
        int x2;
        string str1 = TextBox1.Text.Trim();//获取用户输入任意位数的整型,不再受Int32,Int64,long等数据范围的限制
        string str2 = TextBox2.Text.Trim();
        char[] char1 = str1.ToCharArray();//将输入的值转换为字符因为只有这样才能实现多位数的相加
        char[] char2 = str2.ToCharArray();
        int length = (char1.Length > char2.Length) ? char1.Length : char2.Length;//找出输入两个数中位数较多的一个数
        for (int i = length - 1; i >= 0; i--)//数组中索引是从左往右递增做算术只能从右往左运算
        {
            if (char1.Length > char2.Length)//输入第一个数的长度大于第二个
            {
                x1 = Convert.ToInt32(char1[i].ToString());//将字符转换为整型
                if ((char1.Length - char2.Length) <= i)//考虑输入的两个数的位数不一定一样长
                {
                    s2 = char2[i - (char1.Length - char2.Length)].ToString();//从右往左对应相加如:128+45是8+5,2+4
                    x2 = Convert.ToInt32(s2);
                }
                else
                    x2 = 0;//从右往左对应相加位数不足的补0如:128+45是8+5,2+4,1+0
                ValueAdd(jw ? x1 + x2 + 1 : x1 + x2);//如果先前位数的和>=10那么现在这位数就得加1
            }
            else//输入第一个数的长度小于第二个
            {
                x2 = Convert.ToInt32(char2[i].ToString());
                if ((char2.Length - char1.Length) <= i)
                {
                    s1 = char1[i - (char2.Length - char1.Length)].ToString();
                    x1 = Convert.ToInt32(s1);
                }
                else
                    x1 = 0;
                ValueAdd(jw ? x1 + x2 + 1 : x1 + x2);
            }
            TextBox3.Text = "长度为:" + result.Length + "结果为" + (jw ? "1" : "") + result;//输出结果的长度和值,jw=true时最前面要加1如:99+1=100而不是00
        }
    }
    void ValueAdd(int value)
    {
        if (value >= 10)//如果现在位的和>=10高一位数就得加1
        {
            jw = true;
            result = (value % 10) + result;//相当于value-10因为两个一位数相加和不可能大于20
        }
        else
        {
            jw = false;
            result = value + result;//如果写成result + value这样结果会是反的如:12和21,更不要写成习惯性的result += value
        }
    }

            <asp:TextBox ID="TextBox1" runat="server" Height="90px" TextMode="MultiLine"        Width="919px"></asp:TextBox>            <br />
&nbsp;&nbsp;&nbsp;            <input id="Button2" type="button" value="+"      style=" font-size:20px; width:154;"/><br />
            <asp:TextBox ID="TextBox2" runat="server" TextMode="MultiLine" Width="917px" Height="90px"></asp:TextBox>&nbsp;&nbsp;            <br />
&nbsp;&nbsp;&nbsp;            <asp:Button ID="Button1" runat="server" Text="=" οnclick="Button1_Click"       Font-Size="20px" Width="154px" />         <br />
            <asp:TextBox ID="TextBox3" runat="server" Height="100px"  TextMode="MultiLine" Width="919px"      ReadOnly="True"></asp:TextBox>
大家可以试着写一下乘法思路都差不多一定要遵守的是依次得出个位数十位数百位数千位数…………还有就是在0乘别的数的时候要注意

这个都够强悍吧?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值