大数加法(Java实现)

java 大整数加法 描述 求两个不超过200位的非负整数的和。 输入 有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。 输出 一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。 样例输入 22222222222222222222 33333333333333333333 样例输出 55555555555555555555 一:在讲思路前我要先讲一下样例输入存在的坑: 1.输入可能有很多个前导零 2.可能两行输入都是0 3.输入数据的长度可能不一致,相加时短的一方会越界 阅读详情

输入为两个String类型的大数,求这两个数之和

代码如下(原理代码注释中有说明):

public class BigNumAdd {

    public String add(String num1,String num2){
        //将两个数转化为数组
        char[] chars1 = num1.toCharArray();
        char[] chars2 = num2.toCharArray();

        //用来存放结果,结果的长度一定是等于最大那个数的长度或者其长度加1
        int[] res = new int[Math.max(chars1.length,chars2.length)+1];
        int count = 0;
        int idx1=chars1.length-1,idx2=chars2.length-1;
        //对应位置上相加,如果一个数长度大于另一个,在计算时,超过短的那个数的长度时,令其为0
        //例如,123+26,对应就是3+6,2+2,1+0;
        for(int i=res.length-1;i>=0;i--){
            int a = (count>=chars1.length)?0:(chars1[idx1--]-'0');
            int b = (count>=chars2.length)?0:(chars2[idx2--]-'0');
            count++;
            res[i] = a+b;
        }
        
        //进行进位计算
        for(int i=res.length-1;i>0;i--){
            res[i-1] += res[i]/10;
            res[i] = res[i]%10;
        }
        res[0] += res[1]/10;

        String result = "";
        //判断第一位是否为0,将数组中的数拼接起来
        if(res[0]==0) {
            for (int i = 1; i < res.length; i++) {
                result += res[i];
            }
        }else {
            for (int i = 0; i < res.length; i++) {
                result += res[i];
            }
        }
        return result;
    }

    //测试
    public static void main(String[] args) {
        BigNumAdd bigNumAdd = new BigNumAdd();
        String res1 = bigNumAdd.add("4239482309480329840923840932490234334","324837483749827948723942");
        BigInteger bigInteger = new BigInteger("4239482309480329840923840932490234334");
        BigInteger bigInteger1 = new BigInteger("324837483749827948723942");
        System.out.println(res1);
        System.out.println(bigInteger.add(bigInteger1));
        System.out.println(res1.equals( (bigInteger.add(bigInteger1)).toString()));
    }
}

测试结果如下:

java利用链栈实现大数加法问题 【问题分析】 1、将两个加数的相应位从高位到低位依次压如栈sa,sb 2、若两个加数栈都非空,则依次从栈中弹出栈顶数字相加,结果存入partialsum;      若和有进位,则将和的个位数压入结果栈sum中,并将进位数1加到下一位数字相加的和中;        若和没有进位,则直接将和存入栈sum中 3、若某个加数堆栈为空,则将非空栈中的站顶数字依次弹出与进位数相加,和的个位数压入s 阅读详情

相关推荐

macOS 27下PlayCover“没有权限打开”的完整修复指南

macOS系统通过Gatekeeper、TCC(透明、同意与控制)和安全启动等机制,对第三方应用进行层层校验,以防范恶意代码。这些机制会检查应用的隔离属性、签名状态以及所需系统权限,当任一环节不满足时,就会出现“没有权限打开”的提示。对于开发者工具或未上架App Store的开源软件,这类拦截尤为常见。尤其在macOS 27上,系统进一步收紧了绕过策略,导致PlayCover等工具无法正常启动。本文以PlayCover为例,详细解析权限链路上的三道关卡,并给出清除隔离属性、调整SIP状态、重置TCC记录等完

weixin_32612263的博客 751

Java教程:任意大整数的相加运算

大家好,今天我给大家带来了一个小程序,它实现了对两个任意大整数的相加运算。我们知道,在Java中对整数进行运算可以使用int类型,如果范围不够,可以使用long,再大可以使用double,如果想对更大的整数运算可以使用BigInteger类。今天,我们就自己来编写一段程序,实现对两个任意大的整数的加法运算。

CZ-001的博客 2592

从零到一:Abaqus与Matlab联合仿真的自动化流程构建指南

本文详细介绍了如何构建Abaqus与Matlab联合仿真的自动化流程,涵盖基础架构设计、关键接口技术实现、结果提取与处理技术以及高级参数化优化流程。通过Python脚本作为桥梁,实现数据传递和任务控制,帮助工程师提升仿真效率。特别强调了版本兼容性、异常处理和性能监控等实用技巧。

weixin_29090089的博客 612

大数加法(java)

大数加法 以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。 数据范围:length<10000,字符串仅由’0’~‘9’构成 要求: 空间复杂度 O(1)(仅在传入字符串上操作),时间复杂度 O(n) 示例1 输入: “1”,“99” 返回值: “100” 说明: 1+99=100 示例2 输入: “114514”,"" 复制 返回值: “114514” 思路:从字符串后面往前加,每次相加一次,下标减1, public class BigNumAdd {

weixin_45429720的博客 1832

✔B【AD623】【单运放】仪表放大器 AD623电压放大器模块可调 单电源 单端/差分 微小信号

【】仪表放大器 AD623电压放大器模块可调 单电源 单端/差分 微小信号

童话与梦的博客 8285

Vitis HLS 学习指南与实践教程

Vitis HLS 学习指南与实践教程摘要:本文系统介绍了AMD Vitis HLS工具及其应用。HLS技术将C/C++代码自动转换为硬件描述语言,显著提升FPGA开发效率(5-10倍)。文章对比了HLS与传统RTL设计的优势,包括抽象级别高、开发周期短、代码重用性强等特点。详细讲解了Vitis HLS工具链的核心功能,包括支持的C/C++特性(如任意精度数据类型)、开发流程(项目创建-代码编写-仿真-综合)以及关键优化技术(流水线、循环展开、数组分割等编译指示)。通过具体代码示例展示了HLS设计方法,为F

weixin_44707118的博客 1401

Java解决两个大数相加(简单又高效)

两个大数相加 public String sum(String s1,String s2){ char[] char1 = s1.toCharArray(); char[] char2 = s2.toCharArray(); int flag=0;//记录进位 int i=char1.length,j=char2.length;//记录两个长度 当索引index StringBuilder sb=new Str

快乐学习50年 2364

地瓜派RDK X5部署YOLOv11n避坑指南:从Softmax瓶颈到BPU加速的实战解析

本文详细解析了在地瓜派RDK X5开发板上部署YOLOv11n模型时,从性能暴跌到成功优化的全过程。核心在于通过配置`node_info`将模型中的Softmax算子强制在BPU上以int16精度运行,解决了因算子被分配到CPU导致的严重性能瓶颈。实战部署后,模型推理延迟从126ms降至10.8ms,FPS从7.9提升至92.3,实现了显著的性能优化。

beta5的博客 865

java 大数相加(BigDecimal)

Java中BigDecimal类型的加减乘除运算 add():加法, subtract():减法:, multiply():乘法; divide():除法,

Cai_Xu_Kun的博客 3156

极智量化平台实战:5分钟教你用Python实现双均线交易策略(附完整代码)

本文详细介绍了如何在极智量化平台上使用Python实现双均线交易策略,包括数据获取、信号生成、回测分析和策略优化。通过完整的代码示例和实战演示,帮助开发者快速掌握量化交易系统的基本原理和应用方法,实现自动化交易。

weixin_29269441的博客 493

【图像处理】德里奇( Deriche)边缘检测器

Deriche边缘检测,同canny算法齐名,因此,知道canny原理,也有必要知道德里奇的检测原理。本篇专门针对德里奇算法展开讨论。

gongdiwudu的专栏 8684

Java实现大数加法

Java实现大数加法代码 代码 第一次写,就是这么简洁。【因为不知道说什么( ̄_ ̄|||)】 我没学过数据结构,没有经过比较系统的训练和专业的指导,就是按照人类计算的全过程实现的。所以代码肯定是冗余,不专业。。。。。。 public List<Integer> addition(String number1,String number2) { String xString=numb...

weixin_45100812的博客 429

RK3588 部署 ArcFace(r100)人脸识别模型:ONNX 转 RKNN 全流程详解

本文介绍了将ArcFace人脸识别模型转换为RKNN格式并部署到RK3588 NPU的方法。ArcFace是主流的人脸特征提取模型,适用于1:1比对和1:N检索等场景。文章详细说明了模型特点(输入112x112 RGB图像,输出512维特征向量)及转换步骤:首先使用torch2onnx将PyTorch模型转为ONNX格式,再通过RKNN工具进行量化转换。提供了完整的Python转换代码,包括预处理配置、模型加载、构建和导出过程。该方法能有效提升边缘设备上的人脸识别实时性,适用于门禁、考勤等应用场景。

J。 421

JAVA实现大数加法

转自:http://to-zoe-yang.iteye.com/blog/1097854 当计算非常大的数的相乘时,使用BigDecimal 便希望能自己实现大数的乘法 因为乘法里要使用加法,就先实现加法了 开始时,大数使用字符串保存 这时候我们需要将大数存储在一个数组里 为了节省空间,我们使用Byte存储每一位 Java代码   public st

koutatu的专栏 4633

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Java实现大数乘法_java实现大数加法、乘法(BigDecimal)

之前写过用vector、string实现大数加法,现在用java的BigDecimal类,代码简单很多。但是在online-judge上,java的代码运行时间和内存大得多。java大数加法:求a+bimport java.util.*;import java.io.*;importjava.lang.String;importjava.math.BigDecimal;public classp1...

weixin_31433053的博客 415

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java链栈实现两个大数加法

整数是有上限的,所谓大数,是指超过整数最大上限的数,例如18452545389943209751345473, 它是无法用整数变量来保存的。为解决两个大数求和问题,可以把两个加数看成是数字字符串。 由于最先写的高位反而最后运算,满足栈先进后出的特性,因此选择用栈来解决这个问题。 操作步骤如下: 1)将两个加数的相应位从高位到低位依次压入栈sA和sB中。 2)若两个加数栈都

dly215011的博客 1018

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

大数加法(C++和Java实现)

大数加法C++实现Java实现 C++实现 先用字符串输入,再分别逆序填入数组,接着就模拟手算,从两个数的低位开始(也就是数组从0开始)逐位相加,判断是否大于等于10,如果大于等于10,就取余,然后下一位+1;如果小于10,正常加。 上代码: #include <iostream> #include <cstring> using namespace std; int a[1000000],b[1000000]; int main() { int l1,l2,l; memset(

weixin_45743427的博客 228

大数运算之加法乘法---JAVA实现

常考的算法题 大数加法以及乘法的JAVA版本实现 加法思路: 1. 大数存到数组里 2. 数组进行逆置存储 3. 对位进行加法 判断是否进位 乘法思路: 1. 大数存到数组里 2. 数组进行逆置存储 3. 对位进行相乘 具体看代码 result[i+j]处要思考一下 4. 对相乘后的结果进行进位处理 5.

欢迎来到Super腾的世界 995

java的加法运算_Java实现大数加法运算

题目1198:a+b题目描述:实现一个加法器,使其能够输出a+b的值。输入:输入包括两个数a和b,其中a和b的位数不超过1000位。输出:可能有多组测试数据,对于每组数据,输出a+b的值。样例输入:2 610000000000000000000 10000000000000000000000000000000样例输出:810000000000010000000000000000000ps:(1)、...

weixin_30245667的博客 821

Java如何实现整型大数加法?看这里

引言:在java中有时候数太大了,而一般的int , long 无法存储其值。更加无法进行运算。但是我们可以用字符串方式进行操作。 上代码!! public static String add(String a, String b){ int ai = 1;//数a的倒数第i位 int bi = 1;//数b的倒数第i位 int flag =...

ONEMORE6499的博客 541

java实现大数加法

import java.util.Scanner; import java.io.*; import java.math.BigDecimal; public class Main { public static void main(String[] args) { int n; Scanner in = new Scanner(System.in); n=in.nextI

oliver233的博客 549

【Java 用数组实现大数据加法】

首先我们需要先理解,当两个数相加的时候得出的结果的数值长度,不会超过最长的那个数的2位,也就是最多就是超一位,例如9999+9999=19998,因为这里存在这一个上限,导致的。 其次我们还需要注意两个数长度不一致时的相加,产生的数组下标越界问题,后来发现采用三目运算符可以规避这个问题。 代码如下 ''' Java import java.util.Scanner; public class Main { public static void main(String[] args) {

LX15588的博客 1409

大数字符串的四则运算之加法----Java代码实现

大数相加具体实现步骤 1. 如果两个数同号,则记录符号为,对除符号为以为的数进行相加计算; 2. 如果两个数异号,则比较个数大小,记录较大数的符号位为和的符号位,然后对除符号为以为的数进行相减计算;两个大正整数的加法实现思想 1. 从两个字符串的尾部(即最后一个字符)开始,逐个个字符相加并加上进位标志位tag,如果和大于9,将进位标志位tag=1,否则为tag=0,并将和的个位保存到最终数组中

nshr678的博客 891

用分治法实现大数乘法,加法,减法(java实现)

  大数乘法即多项式乘法问题,求A(x)与B(x)的乘积C(x),朴素解法的复杂度O(n^2),基本思想是把多项式A(x)与B(x)写成 A(x)=a*x^m+b B(x)=c*x^m+d 其中a,b,c,d为x的多项式。 则A(x)*B(x)=(ac)*x^2m+(ad+bc)*x^m+bd 由ad+bc=(a+b)(c+d)-ac-bd 原来的4次乘法和1次加法由3...

aabbaaoo1314的博客 325

大数乘法与大数加法 java实现

最近碰到大数乘法与大数加法的需求,如果直接用int类型会溢出。于是自己写了个大数乘法与大数加法的代码,就当自己练练手了。1.大数加法大数加法的逻辑相对乘法稍微简单一些。先将输入的两个字符串逆序生成字符数组,然后相同位上的字符相加保存在一个结果数组中。最后遍历结果数组,如果当前位的结果大于或等于10,则先将当前位的数值除以10加入下一位,当前位的值为取10的模。看代码如下:package leilei

bitcarmanlee的博客 5076
上一篇: 线程池ThreadPoolExecutor核心参数
下一篇: 通过Docker运行MongoDB
AE86上山啦
博客等级 码龄8年 5粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值