当前位置:网站首页>C语言 简单易懂的高精度加法
C语言 简单易懂的高精度加法
2022-07-06 07:12:00 【小妞无语】
场景
我想大家在小学刚学开始学习列式计算时,应该都有被老妈拎着耳朵说怎么又忘记进一了,都幻想有个机器可以帮自己计算,现在你算看到的高精度加法就是这个原理。
问题描述
它关键的点有简单的几个
1.数据存储问题
当我们的 int 和 longlong也没有办法满足这个数的存储大小时我们该怎么办?
首先想到的就是拆分啊,把一个很长很长的数字拆成一位又一位这样不就方便储存了,这就用到了数组存储的方法
2.拆分之后怎么进行运算
这就简单多了,就和我们小学学的一样满十进一原则
知道这些就ok了,下面看看代码的展示吧!
代码展示
#include<stdio.h>
#include<string.h>
char s1[505],s2[505];
int a[505],b[505],c[505];//定义里面外面都可以
int main()
{
int la,lb,lc;
scanf("%s",s1);
scanf("%s",s2);//由于不知道数字的长度,先将其定义为字符型·
la=strlen(s1);//直接计算长度没有‘/0’
lb=strlen(s2);
for(int i=0;i<la;i++)
a[la-i]=s1[i]-'0';//将字符数组变成数字型便于计算,并使其倒序存储
for(int i=0;i<lb;i++)
b[lb-i]=s2[i]-'0';
lc=(lb>la)?(lb+1):(la+1);//运用三目运算符,由于不论数有多大最大就是最长长度+1
for(int i=0;i<=lc;i++)
{
c[i]+=a[i]+b[i];//由于c[i]可能不为0,所以也要参与累加
c[i+1]=c[i]/10;//进位
c[i]=c[i]%10;//取余
}
if(c[lc]==0&&lc>0)//如果最高为0,就将其去除
lc--;
for(int i=lc;i>0;i--)
printf("%d",c[i]);
return 0;
}
边栏推荐
猜你喜欢
Entity Developer数据库应用程序的开发
idea控制台彩色日志
Wechat brain competition answer applet_ Support the flow main belt with the latest question bank file
漏了监控:Zabbix对Eureka instance状态监控
1189. Maximum number of "balloons"
3. Business and load balancing of high architecture
WPF之MVVM
The author is dead? AI is conquering mankind with art
Cif10 actual combat (resnet18)
Blue Bridge Cup zero Foundation National Championship - day 20
随机推荐
What does UDP attack mean? UDP attack prevention measures
Blue Bridge Cup zero Foundation National Championship - day 20
MPLS experiment
变量的命名规则十二条
可变参数重载时的内存错误
leetcode59. 螺旋矩阵 II(中等)
leetcode704. 二分查找(查找某个元素,简单,不同写法)
leetcode1020. 飞地的数量(中等)
Simple use of JWT
Compile, connect -- notes-2
leetcode6109. 知道秘密的人数(中等,周赛)
Top test sharing: if you want to change careers, you must consider these issues clearly!
SSM学习
Huawei equipment configuration ospf-bgp linkage
微信公众号无限回调授权系统源码 全网首发
leetcode35. 搜索插入位置(简单,找插入位置,不同写法)
[some special grammars about C]
3. Business and load balancing of high architecture
Proteus -- Serial Communication parity flag mode
网络安全基础介绍