前景提要
java初学者,求答
0 悬赏园豆: 100 [待解决问题] (Java)有若干大数,需要对其进行求和操作。
输入格式
每行输入一个字符串,当输入e或者E的时候退出。
输入样例:
42846280183517070527831839425882145521227251250327
55121603546981200581762165212827652751691296897789
输出样例:
97967883730498271109594004638709798272918548148116 岚小叶 | 初学一级 | 园豆: 102
提问于:2019-04-18 14:54 你的问题是当用户输入E或e的时候退出输入吗 – 220✈ 1年前 楼主,对于代码满意不,采纳一下哈 哈哈哈哈 – 不知怎么办才好 1年前 显示帮助
使用"Ctrl+Enter"可进行快捷提交,评论支持部分 Markdown 语法:[link](http://example.com) _italic_ **bold** `code`。
< > 分享
分享您的问题
所有回答(2) 0 好像没啥难度,用一个数组放加数,一个数组放被加数,一个变量放进位数,一个数组放结果。你的问题是什么?你不会一点思路都没有吧? 会长 | 园豆:8398 (大侠五级) | 2019-04-18 14:57 会长看题目,认真审题
支持( 0 ) 反对( 0 ) ㅤㅤㅤㅤㅤㅤ | 园豆:223 (菜鸟二级) | 2019-04-18 14:59 您写一下。。 支持( 0 ) 反对( 0 ) 岚小叶 | 园豆:102 (初学一级) | 2019-04-18 14:59 @岚小叶: 你把想做的功能说一下 支持( 0 ) 反对( 0 ) ㅤㅤㅤㅤㅤㅤ | 园豆:223 (菜鸟二级) | 2019-04-18 15:02 @220✈: E退出那里代码怎么实现的呀 支持( 0 ) 反对( 0 ) 岚小叶 | 园豆:102 (初学一级) | 2019-04-18 15:03 @岚小叶: 判断啊 支持( 0 ) 反对( 0 ) ㅤㅤㅤㅤㅤㅤ | 园豆:223 (菜鸟二级) | 2019-04-18 15:17 @岚小叶: 是控制台程序吗? 支持( 0 ) 反对( 0 ) 会长 | 园豆:8398 (大侠五级) | 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 ) 会长 | 园豆:8398 (大侠五级) | 2019-04-18 17:07 @会长: 看来需要提高哈哈哈,写这个竟然用1小时。但是不会c#。哈哈哈哈 支持( 0 ) 反对( 0 ) 橘子果汁 | 园豆:314 (菜鸟二级) | 2019-04-18 17:41 @不知怎么办才好: 主要是考虑了些输错的情况,比如不是数字,还有直接输入E,你处理了?我确实对char类型的掌握不够好 支持( 0 ) 反对( 0 ) 会长 | 园豆:8398 (大侠五级) | 2019-04-18 17:51 @不知怎么办才好: 你写的不错 支持( 0 ) 反对( 0 ) 会长 | 园豆:8398 (大侠五级) | 2019-04-18 17:52 @会长: 没有哈哈哈。我感觉这是一个类似于leetcode的题,应该没有非法输入。所以没处理非法输入。而且我也没处理负数的情况(不知道会不会出现) 支持( 0 ) 反对( 0 ) 橘子果汁 | 园豆:314 (菜鸟二级) | 2019-04-18 17:53 @不知怎么办才好: cow,我没考虑负数,如果输入负号就提醒重新输入,哈哈哈 支持( 0 ) 反对( 0 ) 会长 | 园豆:8398 (大侠五级) | 2019-04-18 17:53 @会长: 我感觉给个思路就行了。剩下的让楼主来 支持( 0 ) 反对( 0 ) 橘子果汁 | 园豆:314 (菜鸟二级) | 2019-04-18 17:54 @不知怎么办才好: 我已经说思路了,但是楼主嘲讽我,说“您写一下。。”,我以后不再回答这样的问题了。 支持( 0 ) 反对( 0 ) 会长 | 园豆:8398 (大侠五级) | 2019-04-18 17:56 啊哈哈,我没有嘲讽的意思啊,我是个学生,编程能力比较差,真的只是想让你写一下代码让我参照一下。。 支持( 0 ) 反对( 0 ) 岚小叶 | 园豆:102 (初学一级) | 2019-04-18 18:30 编辑文本 预览 上传图片
Ctrl+Enter键快速提交 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 编辑文本 预览 上传图片
Ctrl+Enter键快速提交
清除回答草稿
您需要 登录 以后才能回答,未注册用户请先 注册 。