首页 新闻 会员 周边

java初学者,求答

0
悬赏园豆:100 [待解决问题]

(Java)有若干大数,需要对其进行求和操作。

输入格式
每行输入一个字符串,当输入e或者E的时候退出。

输入样例:
42846280183517070527831839425882145521227251250327
55121603546981200581762165212827652751691296897789
输出样例:
97967883730498271109594004638709798272918548148116

岚小叶的主页 岚小叶 | 初学一级 | 园豆:102
提问于:2019-04-18 14:54

你的问题是当用户输入E或e的时候退出输入吗

220✈ 5年前

楼主,对于代码满意不,采纳一下哈 哈哈哈哈

不知怎么办才好 4年前
< >
分享
所有回答(2)
0

好像没啥难度,用一个数组放加数,一个数组放被加数,一个变量放进位数,一个数组放结果。你的问题是什么?你不会一点思路都没有吧?

会长 | 园豆:12401 (专家六级) | 2019-04-18 14:57

会长看题目,认真审题

 

支持(0) 反对(0) ifz | 园豆:302 (菜鸟二级) | 2019-04-18 14:59

您写一下。。

支持(0) 反对(0) 岚小叶 | 园豆:102 (初学一级) | 2019-04-18 14:59

@岚小叶: 你把想做的功能说一下

支持(0) 反对(0) ifz | 园豆:302 (菜鸟二级) | 2019-04-18 15:02

@220✈: E退出那里代码怎么实现的呀

支持(0) 反对(0) 岚小叶 | 园豆:102 (初学一级) | 2019-04-18 15:03

@岚小叶: 判断啊

支持(0) 反对(0) ifz | 园豆:302 (菜鸟二级) | 2019-04-18 15:17

@岚小叶: 是控制台程序吗?

支持(0) 反对(0) 会长 | 园豆:12401 (专家六级) | 2019-04-18 15:40

@岚小叶: 没有Java环境,用C#写了一个:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PlusProgram
{
    class Program
    {
        static void Main(string[] args)
        {
            List<char> firstNumber = ReadNumber("first number(ends with 'E' or 'e'):");
            List<char> secondNumber = ReadNumber("second number(ends with 'E' or 'e'):");
            string result = Plus(firstNumber, secondNumber);

            Console.WriteLine();
            Console.WriteLine($"it's {result}");
            Console.ReadLine();
        }

        private static List<char> ReadNumber(string name)
        {
            Console.WriteLine();
            Console.WriteLine(name);

            List<char> charList = new List<char>();
            ConsoleKeyInfo? keyinfo = null;           

            while (true)
            {
                keyinfo = Console.ReadKey();
                if (keyinfo.Value.KeyChar >= 48 && keyinfo.Value.KeyChar <= 57)
                {
                    charList.Add(keyinfo.Value.KeyChar);
                }
                else if (keyinfo.Value.Key == ConsoleKey.E)
                {
                    if (charList.Count > 0)
                    {
                        break;
                    }
                    else
                    {
                        Console.WriteLine();
                        Console.WriteLine("you input nothing, please try again");
                    }
                }
                else
                {
                    Console.WriteLine();
                    Console.WriteLine("please input only a number(0---9)");
                    charList.Clear();
                }
            }
            return charList;
        }

        private static string Plus(List<char> firstNumber, List<char> secondNumber)
        {
            List<char> result = new List<char>();

            int carry = 0;

            var bigList = firstNumber.Count >= secondNumber.Count ? firstNumber : secondNumber;
            var smallList = secondNumber.Count <= firstNumber.Count ? secondNumber : firstNumber;

            var bigListIndex = bigList.Count - 1;
            var smallListIndex = smallList.Count - 1;

            while (bigListIndex >= 0)
            {
                var bitPlus = (bigList[bigListIndex] - 48) + (smallListIndex < 0 ? 0 : (smallList[smallListIndex] - 48)) + carry;
                if (bitPlus > 9)
                {
                    carry = 1;
                    result.Insert(0, char.Parse((bitPlus % 10).ToString()));
                }
                else
                {
                    carry = 0;
                    result.Insert(0, char.Parse(bitPlus.ToString()));
                }
                bigListIndex--;
                smallListIndex--;
            }
            if (carry == 1)
            {
                result.Insert(0, char.Parse(carry.ToString()));
            }

            StringBuilder sb = new StringBuilder();
            foreach (var item in result)
            {
                sb.Append(item);
            }
            return sb.ToString();
        }
    }
}

我真疯了,花了一个小时写这个。以后可不回答初学者的题目了。

支持(0) 反对(0) 会长 | 园豆:12401 (专家六级) | 2019-04-18 17:07

@会长: 看来需要提高哈哈哈,写这个竟然用1小时。但是不会c#。哈哈哈哈

支持(0) 反对(0) 是小毛吖 | 园豆:314 (菜鸟二级) | 2019-04-18 17:41

@不知怎么办才好: 主要是考虑了些输错的情况,比如不是数字,还有直接输入E,你处理了?我确实对char类型的掌握不够好

支持(0) 反对(0) 会长 | 园豆:12401 (专家六级) | 2019-04-18 17:51

@不知怎么办才好: 你写的不错

支持(0) 反对(0) 会长 | 园豆:12401 (专家六级) | 2019-04-18 17:52

@会长: 没有哈哈哈。我感觉这是一个类似于leetcode的题,应该没有非法输入。所以没处理非法输入。而且我也没处理负数的情况(不知道会不会出现)

支持(0) 反对(0) 是小毛吖 | 园豆:314 (菜鸟二级) | 2019-04-18 17:53

@不知怎么办才好: cow,我没考虑负数,如果输入负号就提醒重新输入,哈哈哈

支持(0) 反对(0) 会长 | 园豆:12401 (专家六级) | 2019-04-18 17:53

@会长: 我感觉给个思路就行了。剩下的让楼主来

支持(0) 反对(0) 是小毛吖 | 园豆:314 (菜鸟二级) | 2019-04-18 17:54

@不知怎么办才好: 我已经说思路了,但是楼主嘲讽我,说“您写一下。。”,我以后不再回答这样的问题了。

支持(0) 反对(0) 会长 | 园豆:12401 (专家六级) | 2019-04-18 17:56

啊哈哈,我没有嘲讽的意思啊,我是个学生,编程能力比较差,真的只是想让你写一下代码让我参照一下。。

支持(0) 反对(0) 岚小叶 | 园豆:102 (初学一级) | 2019-04-18 18:30
0

闲来无事写的,没有仔细测试;提供一个思路,可以自己写。而且只是写的加法,没有考虑减法。其实减法一个道理。

import java.util.Scanner;

public class BigNumAdd {

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String result = ""; // 存储结果
    String num1 = "0"; // 初始化第一个数值
    String num2 = ""; // 存储输入的数值
    // 未输入e的时候持续输入
    while (!(num2 = sc.nextLine()).equalsIgnoreCase("e")) {
      result = add(num1.toCharArray(), num2.toCharArray());
      num1 = result;
    }
    System.out.println(result);
  }

  private static String add(char[] num1s, char[] num2s) {
    int[] num1 = charToInt(num1s);
    int[] num2 = charToInt(num2s);
    int len1 = num1.length;
    int len2 = num2.length;
    int[] sum = new int[Math.max(len1, len2) + 1];
    int flag = 0;
    int n1 = len1 - 1, n2 = len2 - 1, s = sum.length - 1;
    while (n1 >= 0 && n2 >= 0) {
      int tmp = num1[n1--] + num2[n2--] + flag;
      if (tmp >= 10) {
        tmp = tmp % 10;
        flag = 1;
      } else {
        flag = 0;
      }
      sum[s--] = tmp;
    }
    while (n1 >= 0) {
      sum[s--] = num1[n1--];
    }
    while (n2 >= 0) {
      sum[s--] = num2[n2--];
    }
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < sum.length; i++) {
      if (i == 0 && sum[i] == 0) {
        continue;
      }
      sb.append(sum[i]);
    }
    return sb.toString();
  }

  private static int[] charToInt(char[] chs) {
    int[] res = new int[chs.length];
    for (int i = 0, len = chs.length; i < len; i++) {
      res[i] = chs[i] - '0';
    }
    return res;
  }

}

结果:

是小毛吖 | 园豆:314 (菜鸟二级) | 2019-04-18 16:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册