大整数相加


function repeatStr(ch, n){
var str = "";
for(var i=0; i< n; i++){
str += ch;
}
return str;
}
function bigSum(a,b){
a = String(a);
b = String(b);

var distLen = Math.abs(a.length - b.length);
if(a.length > b.length){
b = repeatStr("0",distLen) + b;
}else{
a = repeatStr("0",distLen) + a;
}
//console.log(b)
var result = "";
var addPoint = 0;
var j = 1;
for(var i=0; i < a.length; i++){

var tmp = parseInt(a.charAt(a.length - j),10)
+ parseInt(b.charAt(b.length - j), 10)
+ addPoint ;
if(tmp >= 10){
addPoint = 1;
tmp -= 10;
}else{
addPoint = 0
}
j++;
result = tmp + result;
}
if(addPoint == 1){
return "1" + result;
}
return result;
}

console.log(bigSum("1","999"))
在PTA平台上实现大整数相加有不同的场景,以下分别介绍两种常见情况的实现方法及代码示例。 ### 基于字符串输入的大整数相加 在处理大整数相加时,由于普通数据类型无法存储极大的整数,可采用字符串来存储大整数。解题思路是逐位相加,并处理进位。 以“jmu - Java - 02基本语法 - 07 - 大整数相加”为例,每行输入一个字符串代表一个大整数,连续输入若干行,当某行字符为e或E时退出,以下是Java代码示例: ```java import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); BigInteger sum = BigInteger.ZERO; while (scanner.hasNextLine()) { String input = scanner.nextLine(); if ("e".equalsIgnoreCase(input)) { break; } BigInteger num = new BigInteger(input); sum = sum.add(num); } System.out.println(sum); scanner.close(); } } ``` 上述代码中,使用`BigInteger`类来处理大整数相加操作,通过循环读取输入的字符串,将其转换为`BigInteger`类型并累加到`sum`中,直到输入为`e`或`E`时停止循环并输出结果。 ### 基于多项式形式的大整数相加 在某些情况下,大整数相加可能以多项式的形式给出。运用顺序表实现多项式相加的思路是使用数组存储多项式,将两个多项式的相同指数项系数直接相加,若和为0则该指数项消失。 以下是C语言代码示例: ```c #include <stdio.h> #include <string.h> #define MAX_EXP 10000 int main() { int n; scanf("%d", &n); // 读取测试组数 while (n--) { // 处理每组测试数据 int result[MAX_EXP + 1] = {0}; // 初始化结果数组为0 int A, B; // 处理第一个多项式 scanf("%d", &A); for (int i = 0; i < A; i++) { int exp, coeff; scanf("%d %d", &exp, &coeff); result[exp] += coeff; // 累加系数到对应指数 } // 处理第二个多项式(逻辑同上) scanf("%d", &B); for (int i = 0; i < B; i++) { int exp, coeff; scanf("%d %d", &exp, &coeff); result[exp] += coeff; } // 后续输出逻辑 int first = 1; for (int i = MAX_EXP; i >= 0; i--) { if (result[i] != 0) { if (!first) { printf(" "); } printf("%d %d", i, result[i]); first = 0; } } if (first) { printf("0 0"); } printf("\n"); } return 0; } ``` 上述代码中,使用`result`数组存储合并后的多项式,数组索引为指数。通过循环读取两个多项式的每一项,将相同指数项的系数相加存储在`result`数组中,最后按指数从大到小输出非零系数的项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值