高精度加法
本文最后更新于 534 天前,其中的信息可能已经有所发展或是发生改变。

A+Bproblem

int的大小是有限的,long long也会遇到限制,那高精度的加法就成了必须要了解的知识。

考虑两个数做加法,就是两个数字的同一位相加,然后再进位。因此将两个很大的整数,用数组一位一位的存储,手动的模拟加法,便是hp

直接上代码

#include<iostream>
#include<cstring>
using namespace std;

void hp(char*a,char*b,char*c)
{
    int arr1[2000]={0};
    int arr2[2000]={0};
    int arr3[2001]={0};
    int i,s=0;
    int len1,len2,len;
    len1=strlen(a);
    len2=strlen(b);
    len=len1>len2?len1:len2;        //判断相加后的可能位数
    len++;
    for(i=0;i<len1;i++)             //将第一个数转成数组
    arr1[i]=*(a+len1-i-1)-'0';
    for(i=0;i<len2;i++)             //将第二个数转成数组
    arr2[i]=*(b+len2-i-1)-'0';
    for(i=0;i<len;i++)              //逐位相加,暂时不考虑进位
    arr3[i]=arr1[i]+arr2[i];
    for(i=0;i<len;i++)              //进位
    {       
        arr3[i]+=s;
        s=arr3[i]/10;
        arr3[i]=arr3[i]%10;
    }
    len=1;
    for(i=2000;i>=0;i--)        //判断相加后的位数
    {
        if(arr3[i]!=0)
        break;
    }
    if(i==-1)
    i++;
    len=i+1;
    *(c+len)='\0';
    for(i=len-1;i>=0;i--)       //将结果转为字符串存储
    {
        *(c+len-i-1)=arr3[i]+'0';
    }
}
int main()
{
    char a[1000]={'\0'};
    char b[1000]={'\0'};
    char c[1000]={'\0'};
    cin>>a>>b;
    hp(a,b,c);
    cout<<c;
}

先这样,后面有东西再补充或者开新文章

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇