码迷,mamicode.com
首页 > 其他好文 > 详细

高精度减法运算

时间:2018-02-07 22:42:36      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:bsp   还需   using   space   rcp   efi   can   相等   直接   

eg:计算10002-99的差

#include "stdio.h"
#include "string.h"
#include "algorithm"
#define N 3005
using namespace std;
int cmp(char a[],char b[])            //比较两个数大小
{                                     //如果 a>b返回1,a=b返回0,a<b返回-1
    int lena=strlen(a);
    int lenb=strlen(b);
    if(lena>lenb)return 1;            
    if(lena==lenb)return strcmp(a,b); 
    if(lena<lenb)return -1;
} 
void sub(char a[],char b[],char c[])
{
    int t,i,r=0;
    int res=cmp(a,b);
    if(res<0)                        //如果第一个数小,需要交换 
    {
        strcpy(c,a);
        strcpy(a,b);
        strcpy(b,c); 
    } 
    else if(res==0)                  //如果相等直接跳出 
    {
        strcpy(c,"0");
        return;
    }
    strrev(a);                       //逆序 
    strrev(b);                       //逆序 
    for(i=0;b[i]!=\0;i++)          //低位至高位 
    {
        t=(a[i]-0-r)-(b[i]-0);   //每位上的相减 
        if(t<0)
        {
            r=1;                     //向高位借1 
            t=t+10;
        } 
        else r=0;                    //不借位 
        c[i]=t+0;                  //结果转换为字符 
    }
    for(;a[i]!=\0;i++)             //a中剩下的还需考虑借位 
    {
        t=a[i]-0-r;
        if(t<0)
        {
            r=1;
            t=t+10;
        }
        else r=0;
        c[i]=t+0;
    }
    while(c[i-1]==0)               //去除前导0 
    i--;
    if(res<0)                        //若结果为负 
    c[i++]=-;                      
    c[i]=\0;                       //结尾 
    strrev(c);                       //逆序回正常 
}
int main()
{
    char a[N],b[N],c[N];
    scanf("%s %s",a,b);
    sub(a,b,c);
    puts(c);                                                                                            
    return 0;
}

 

高精度减法运算

标签:bsp   还需   using   space   rcp   efi   can   相等   直接   

原文地址:https://www.cnblogs.com/kannyi/p/8428493.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!