7-2 N进制高精度加法 (字符串的应用)

到底应该怎样理解进制呢?首先得有“一个”的数量概念,然后就是这样的:
把用来表示数量的符号依次排列,例如: q w e r
然后定义最前面的符号为“零”,即“没有”,后面的符号表示的数量依次比前一个符号多“一个”
进制就这样产生了: 例如当我们数数,依次数到 q w e r ,再往后数一个,符号不够用了,那么就写成 wq
并且,我们把这种进制命名为“wq”进制。
感觉怪异吗? 那么请换成我们熟悉的所谓“10”进制看看:
我们的用于表示数量的符号依次是: 0 1 2 3 4 5 6 7 8 9 , 当数到9,再往后数“一个”时,就数到了 10
看这幅漫画(来源于网络),看看能不能理解“进制”的概念? 7-2 N进制高精度加法 (字符串的应用)_第1张图片
现在,给定表示数量的符号(这些符号就形成了某种进制),以及该种进制下的两个不超过100位的正整数,请计算两数之和。

输入格式:

第一行给定表示数量的符号,每个符号为一个字符、各不相同且中间没有空格,最多有30个符号且符号的可能范围是:数字0-9、大小写字母、!@#$%^&*()
接下来两行每行给出一个该进制下的不超过100位的正整数

输出格式:

在一行中输出该进制下的两数之和。

输入样例1:

0123456789
123
12

输出样例1:

135

输入样例2:

abcd
bcd
bc

输出样例2:

cab

首先将两个字符串进行反转,然后逐次相加进位, 最后输出。

其中需要注意的一个地方是把 scanner.close()加上,不太懂为什么,我推测可能是因为scanner这个方法用完了要销掉

import java.util.Scanner;
import java.time.chrono.MinguoChronology;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Main
{
	public static String reverse(String str) 
	 {
	        // base case: if string is null or empty
	        if (str == null || str.equals(""))
	            return str;
	        // create an empty list of characters
	        List < Character > list = new ArrayList < Character > ();
	        // push every character of the given string into it
	        for (char c: str.toCharArray())
	            list.add(c);
	        // reverse list using java.util.Collections reverse()
	        Collections.reverse(list);
	        // covert ArrayList into String using StringBuilder and return it
	        StringBuilder builder = new StringBuilder(list.size());
	        for (Character c: list)
	            builder.append(c);
	        return builder.toString();
	   }
	public static void main(String args[])
	{
		
		
		String s;
		Scanner scanner = new Scanner(System.in);
		s = scanner.nextLine();
		String a,b;
		a = scanner.nextLine();
		b = scanner.nextLine();	
		int lena = a.length();
		int lenb = b.length();
		int len = s.length();
		String ans = "";
		int flag = 0;
		a = reverse(a);
		b = reverse(b);
		for(int i = 0; i < lena || i < lenb; i ++)
		{
			int j = 0;
			if(i0)
				flag = 1;
			else
				flag = 0;
			temp = temp%len;
			ans = ans.replace(ans, ans + s.substring(temp, temp+1));
		}
		int length = ans.length();
		if(flag==1)
		{
			System.out.printf("1");
			for(int i = length - 1; i >= 0; i --)
				System.out.printf(ans.substring(i, i+1));
		}
		else
		{
			for(int i = length-1; i >= 0; i --)
			{
				if(ans.substring(i, i+1).equals("0"))
					length --;
				else
					break;
			}
			for(int i = length - 1; i >= 0; i --)
				System.out.printf(ans.substring(i, i+1));
		}
		scanner.close();
		
		
}

}

 

你可能感兴趣的:(java练习)