高精度加法(A+B problem)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/*--- A+B problem 高精度 ---*/
#include<bits/stdc++.h>
using namespace std;
int max(int a,int b)
{
    return a>=b?a:b;
}
int main(void)
{
    char a[505],b[505];
    int numa[505],numb[505];
    int lena,lenb;
    int sum[505];
 
    memset(sum,0,sizeof(sum));        //数组清零!!!十分重要
    memset(numa,0,sizeof(numa));   
    memset(numb,0,sizeof(numb));
     
    cin>>a>>b;
    lena=strlen(a);
    lenb=strlen(b);
     
    for(int i=0;i<=lena-1;i++){ numa[lena-1-i]=a[i]-'0'; }//把字符转化为数字
    for(int i=0;i<=lenb-1;i++){ numb[lenb-1-i]=b[i]-'0'; }
     
    for(int i=0;i<=max(lena,lenb)-1;i++){ sum[i]=numa[i]+numb[i]; }
     
    for(int i=0;i<=max(lena,lenb)-1;i++)
    {
        while(sum[i]>=10)          //讨论进位问题
        {
            sum[i]=sum[i]-10;
            sum[i+1]++;
        }
    }
     
    if(sum[max(lena,lenb)]>0) for(int i=max(lena,lenb);i>=0;i--)//注意!!!最后一位有可能进位
    cout<<sum[i];
    else for(int i=max(lena,lenb)-1;i>=0;i--)
    cout<<sum[i];
     
    return 0;
}   

 高精度加法,由于数字过大,用long long也存不下,故我们需要改变思路,采用字符串进行操作。而在纸上简单的进行模拟后(这一步十分的重要!!!!一定要先模拟,不能在脑子里臆想)我们可以得知需要将数字反过来写之后才能进行计算,于是便有了上面的代码。要注意的是最后以为也有可能进位,例如99+1变为100,如果还是用max(lena,lenb)-1作为开始进行输出就只会输出00,答案错误,所以一定要考虑进位!!!。

posted @   血赤叶红  阅读(52)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示