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

    #include<stdio.h>
    #include<string.h>
    char s1[1000],s2[1000];//定义全局变量
    int a[1000]={0},b[1000]={0},c[1000]={0},k,j;
    int main()
    {
    int l1=0,l2=0,l=0,i;//定义局部变量
    scanf("%s",s1);//读两个字符型的数
    scanf("%s",s2);
    l1=strlen(s1);//赋值S1长度
    l2=strlen(s2);//赋值S2长度
    for(i=0;i<=l1-1;i++)//倒序输入a数组
    {
    a[l1-1-i]=s1[i]-'0';
    }
    for(i=0;i<=l2-1;i++)//倒序输入b数组
    {
    b[l2-1-i]=s2[i]-'0';
    }
    if(l1==l2)//两个数的长度相等时
    {
    for(j=l1;j>=0;j--)//判断a,b谁大
     {
    if(a[i]>b[i])
    {
    k=0;
    break;
    }
    if(b[i]>a[i])
    {
    k=1;
    break;
    }


    }
    }
    if(l1>l2||k==0)//a比b长而且a比b大,就是a大的时候
    {
    l=l1;//l登基成功,成为了新的l
    for(i=0;i<=l;i++)
    {
    if(a[i]<b[i])//要借位的一个生命
    {
    a[i]=a[i]+10;//借10
    a[i+1]-=1;//可惜高位要还1
    }
    c[i]=a[i]-b[i];//开减呗
    }
    while(l>1&&c[l-1]==0)l--;//判断后面有没有0,看完了没有,完了就把无用的0减了
    for(i=l-1;i>=0;i--)//倒序输出 
    printf("%d",c[i]);
    }

    else
    {

    l=l2;//l1比l2大,l2在谋权篡位
    printf("-");//没办法,l1减不动就让符号来充数
    c[i]=b[i]-a[i];//减呗,悲催啊,只能怪a太弱了
    for(i=0;i<=l;i++)//重复刚才的过程,不过这个版本的主人公是b
    {
    if(b[i]>a[i])
    {
    b[i+1]=b[i+1]+10;
    b[i]-=1;
    }
    c[i]=b[i]-a[i];

    }
    while(l>1&&c[l-1]==0) l--;
    }
    for(i=l-1;i>=0;i--)//倒序输出
    {
    printf("%d",c[i]);
    }
    return 0;//故事讲完了

     


    }

  • 相关阅读:
    第36课 经典问题解析三
    第35课 函数对象分析
    67. Add Binary
    66. Plus One
    58. Length of Last Word
    53. Maximum Subarray
    38. Count and Say
    35. Search Insert Position
    28. Implement strStr()
    27. Remove Element
  • 原文地址:https://www.cnblogs.com/hxq2003/p/5649529.html
Copyright © 2011-2022 走看看