高精度减法运算

2018-02-08 07:53:29来源:cnblogs.com作者:Kannyi人点击

分享

eg:计算10002-99的差

#include "stdio.h"#include "string.h"#include "algorithm"#define N 3005using 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;}

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台