(C语言)高精度加法
来源:互联网 发布:上海中科软件 编辑:程序博客网 时间:2024/05/17 08:42
题目描述
我们知道 int 和 long 类型的变量在64位操作系统中能表示的数据范围为[-2^31, 2^31 - 1], long long 类型的变量能表示的数据范围为 [-2^63, 2^63 - 1], 但是现在我们需要计算的数据超过了long long 型数据能表示的范围。这时候我们就需要使用高进度算法。什么是高精度算法呢,简单来说,就是使用整数数组或者字符数组来表示一个long long 型数据无法表示的大数(正数或负数). 然后用这两个数组来模拟加法和减法运算,从而实现任意范围数字的相加减。
输入
输入有多组数据。
对于每组测试数据,在一行中给出两个正整数a,b(a,b的位数小于等于1000),中间用一个空格隔开。
当读到文件结尾时输入结束
输出
对于每组输入,在一行中输出两个正整数相加的结果。
样例输入
123456 123123456789 9876543215555555555555555555 66666666666666
样例输出
12357911111111105555622222222222221
(高精度即输入的数据已经大大的超过了int 和long的数据范围,所以基本思想就是将输入的数据以字符串的形式保存到一个字符数组中,然后将字符数组倒置,因为不倒置不好处理相加之后的进位,然后从两个字符数组的第一个元素分别向后相加,如果相加后的结果大于零则向前进一,然后该位取除以十之后的余数,最后输出相加后的字符串数组即可)#include<stdio.h>
#include<string.h>int main(){
char a1[1000],a2[1000];
int an1[1000]={0},an2[1000]={0};
int lena1,lena2,i;
void addition(int a[],int b[],int k1,int k2);
while(scanf("%s%s",a1,a2)!=EOF){ //读到文件结尾处结束
lena1=strlen(a1);
lena2=strlen(a2);
for(i=0;i<lena1;i++)
an1[i]=a1[lena1-i-1]-'0'; //将数组倒置并将字符类型转换为数字类型,下同
for(i=0;i<lena2;i++)
an2[i]=a2[lena2-i-1]-'0';
addition(an1,an2,lena1,lena2);
}
return 0;
}
void addition(int a[],int b[],int k1,int k2){
int c[1001]={0},k,i;
k=( k1>k2 ? k1:k2);
for(i=0;i<k;i++){ //同位相加
c[i]=a[i]+b[i]+c[i];
c[i+1]=(int)c[i]/10;
c[i]=(int)c[i]%10;
}
if(c[k]) k++;
for(i=k-1;i>=0;i--)
printf("%d",c[i]);
printf("\n");
}
0 0
- (C语言)高精度加法
- C语言 高精度加法
- C语言高精度加法
- 高精度加法(c++)
- 小白C语言写高精度算法(加法)
- 高精度的加法(c++)
- c语言高精度大整数加法运算
- 高精度加法(简明版C语言)
- C语言实现的高精度加法
- 高精度加法的c语言实现
- 【C++】高精度加法
- c高精度加法模板
- C-高精度加法
- C 语言高精度算法(一)——加法
- C++: 高精度加法与高精度减法
- 大数(高精度)加法
- 二进制(高精度加法)
- 高精度(加法)
- 实现微信内置浏览器全屏播放模式下html元素漂浮
- 四大图片加载框架之最 old ImageLoader , 但是有些老项目还在用的!加载 https
- 连接查询
- php浏览器访问创建目录失败
- 【Unity3d】5.6新系统——Video Player
- (C语言)高精度加法
- 剑指offer 链表中环的入口结点
- C. Mike and gcd problem
- 输出图案(四)----输出正多边形图案:(难度系数:半颗星)
- windows ffmpeg 的安装
- 深度学习:综述
- How To Enable Android's Developer Options
- (一)JUnit概述及一个简单例子
- 继承的运用