将大整数存入字符数组,按位相加。 给你写一段伪代码。
成都创新互联公司专业为企业提供海东网站建设、海东做网站、海东网站设计、海东网站制作等企业网站建设、网页设计与制作、海东企业网站模板建站服务,10年海东做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
String a = "12389839843958394";
String b = "23445655234343";
char ac [] = a.toCharArray();
char bc [] = b.toCharArray();
这里要将数组ac 和bc 倒序排列,因为"123"转换后为{'1','2','3'} 高位在前,倒序是为了低位在前。这部分代码自己实现把。
char longc[];
char shortc[];
if (ac.length=bc.length) {
longc=ac;
shortc=bc;
} else {
longc=bc;
shortc=ac;
}
下面做一个for循环,按位相加乘以10的i次方。就像小学学的列竖式子一样
int sum=0;
for (int i=longc.length;ilongc.length;i++) {
if (ishortc.length) {
sum+=(longc[i]+shortc[i]-96)*Math.pow(10, i);
} else {
sum+=(longc[i]-48)*Math.pow(10, i);
}
}
其中字符相加的时候减48是将char 转换成int
不管是不是用JAVA,其实方法都一样,利用数组比如说长度为一千的数字,可以这个 int[] number = new int[1000];相加的思路是,首先两个数组的长度必须是一致,位数不同的话,前面补0,内存有点浪费,但是计算起来比较方便。然后让它们从0到最高位,每位进行相加并保存相应的位置上。最后一步是从0开始判断有没有大于10的数字,如果有就向前面进位(前一个加1,当前位减10),这样就可以。如果是相减,其实思路还是一样的,每位先相减,再判断是否有小于0的,如果有则向前面一位借1(前一位减1,当前位加10)如果是相乘,和上面一样,不过要注意的是进位的时候,不止进一位,比如5*6,就要向前进3位了(前一位加3,当前位减30)除就比较麻烦点,要涉及到精确度问题,得看实际需要 输出就更容易了,直接for循环数组 特别要注意的是,如果最高位有进位的时候,这个是比较容易出错的地方 思路在上面,如果实现不了请留言
努力跟着你这位大神的思路,终于看清了;
先抛开Scanner和while 循环。
for循环里面
iter.subtract(BigInteger.ONE) 表示 iter=iter-1 造成死循环
bInt[iter.intValue()],10000的时候数组越界。
这是因为if后面执行的语句只有system.out.println("
");后面是复合语句,要用大括号括起来,则为
{system.out.println("
");
system.out.print("\t"
+ch);
}
那么,最后输出的结果就只有a,i,这是一个很容易犯错误的地方。