zoukankan      html  css  js  c++  java
  • 高精度减法(c++)

    高精度减法

    每当要进行精度较高的运算时,就要用到高精度。
    下图是各个类型的数值范围:
    在这里插入图片描述
    在这里插入图片描述
    如果想不起各个类型占多少字节,可以采用下面的方法:

    printf("%d %d",sizeof(int),sizeof(long long));
    

    格式为:
    sizeof(数据类型)

    可以把值赋值给一个变量,也可以直接输出;
    好了,回到正点。我们先看例题:

    大整数减法

    时间限制: 1000 ms 内存限制: 65536 KB
    提交数: 9471 通过数: 5448
    【题目描述】
    求两个大的正整数相减的差。

    【输入】
    共2行,第1行是被减数a,第2行是减数b(a>=b)。每个大整数不超过200位,不会有多余的前导零。

    【输出】
    一行,即所求的差。

    【输入样例】
    9999999999999999999999999999999999999
    9999999999999
    【输出样例】
    9999999999999999999999990000000000000

    读完题目,是不是发现这就是赤裸裸的模板题目;大概的思路为3步:
    一,读入a和b;
    二,进行计算,如果a[i]<b[i],就借位;
    三,输出;

    先是读数:

    int i;
    	int a[205],b[205],lena,lenb;
    	char t[205],t1[205];
    	scanf("%s %s",t,t1);
    	lena=strlen(t);
    	lenb=strlen(t1);
    	memset(a,0,sizeof(a));
    	memset(b,0,sizeof(b));
    	for(i=0;i<lena;i++)a[lena-i]=t[i]-48;
    	for(i=0;i<lenb;i++)b[lenb-i]=t1[i]-48;
    

    再进行计算:

    i=1;x=0;
    	while((i<=lena) or (i<=lenb)){
    		a[i]=a[i]-b[i]-x;
    		if(a[i]<0){
    			a[i]+=10;
    			x=1;
    		}
    		 else x=0;
    		i++;
    	}
    

    最后再输出:

    bool f=false;
    	for(i=N-1;i>=1;--i){
    		if(a[i]!=0){
    			printf("%d",a[i]);
    			if(!f)f=true;
    		}
    		 else if(f)printf("%d",a[i]);
    	}
    	if(!f)printf("0");
    

    完整AC程序:

    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    using namespace std;
    const int N=205;
    int main(){
    	int i;
    	int a[N],b[N],lena,lenb,x;
    	char t[N],t1[N];
    	scanf("%s %s",t,t1);
    	lena=strlen(t);
    	lenb=strlen(t1);
    	memset(a,0,sizeof(a));
    	memset(b,0,sizeof(b));
    	for(i=0;i<lena;i++)a[lena-i]=t[i]-48;
    	for(i=0;i<lenb;i++)b[lenb-i]=t1[i]-48;
    	i=1;x=0;
    	while((i<=lena) or (i<=lenb)){
    		a[i]=a[i]-b[i]-x;
    		if(a[i]<0){
    			a[i]+=10;
    			x=1;
    		}
    		 else x=0;
    		i++;
    	}
    	bool f=false;
    	for(i=N-1;i>=1;--i){
    		if(a[i]!=0){
    			printf("%d",a[i]);
    			if(!f)f=true;
    		}
    		 else if(f)printf("%d",a[i]);
    	}
    	if(!f)printf("0");
    	return 0;
    }
    

    记得点赞哦

  • 相关阅读:
    济南学习 Day5 T3 晚
    Codevs 1043 ==洛谷 P1004 方格取数
    济南学习 Day 5 T2 晚
    济南学习 Day 5 T1 晚
    济南学习 Day 5 T3 am
    济南学习 Day 5 T2 am
    LeetCode Weekly Contest 8
    poj-1410 Intersection
    leetcode-Warm Up Contest-Aug.21
    poj-1384 Piggy-Bank
  • 原文地址:https://www.cnblogs.com/luojunhang/p/12300187.html
Copyright © 2011-2022 走看看