精华内容
下载资源
问答
  • 高精度减法

    2016-03-15 15:49:38
    高精度减法
  • 高精度 减法

    2020-10-02 18:57:41
    二 减法 思路 准备工作 判断两个数的大小 ...//高精度减法 //只能是两个正数相减,而且要大减小 #include<stdio.h> #include<string.h> #include<cstring> #include<iostream> using namespa

    高精度算法 减法

    减法 思路
    准备工作 判断两个数的大小
    1 交换两个数(s1>s2 不用交换 此步省略)
    2 判断s1 s2的长度
    3 转置存储s1 s2 并将他们变为int 类型
    4 核心代码 s1+s2
    5 删除前导0
    6 倒置输出结果

    //高精度减法
    //只能是两个正数相减,而且要大减小
    #include<stdio.h>
    #include<string.h>
    #include<cstring>
    #include<iostream>
    using namespace std;
    char s1[3001],s2[3001],s3[3001];
    int a[3001],b[3001],c[3001],flag=0;
    bool compare(char s1[],char s2[]){
        int u=strlen(s1); int v=strlen(s2);
    	if(u!=v) return u>v;
    	for(int i=0;i<u;i++){
    	if(s1[i]!=s2[i])  return s1[i]>s2[i];}
    	return false;
    }
    
    int main(){
    	//输出两个字符窜数 
    	scanf("%s",s1);
    	scanf("%s",s2);
    	
    	//进行交换数据s1 s2 
    	if(!compare(s1,s2)){
    		flag=1;
    		strcpy(s3,s1);
    		strcpy(s1,s2);
    		strcpy(s2,s3);
    	}
    	 
    	// 判断长度 转置存储 
    	int len1=strlen(s1);
    	int len2=strlen(s2);
    	for(int i=0;i<len1;i++) 
    	a[len1-i]=s1[i]-'0';
    	for(int i=0;i<len2;i++) 
    	b[len2-i]=s2[i]-'0';
    	
    	//进行计算A-B
    	int len3=max(len1,len2);
    	for(int i=1;i<=len3;i++) 
    	{
    		if(a[i]<b[i])
    		{
    			a[i+1]--;
    			c[i]=10+a[i];
    		}
    		c[i]=a[i]-b[i];
    	}
    	
    	//输出结果
         while (c[len3]==0&&len3>1) len3--;
         if(flag==1) printf("-");
    	 for(int i=len3;i>0;i--) {
    	 	printf("%d",c[i]); 
    	 }
    	 return 0;
    } 
    
    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,388
精华内容 555
关键字:

高精度减法