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;//故事讲完了

     


    }

  • 相关阅读:
    习题1
    实验3阅读下面程序、分析说明运行结果,并上机验证。
    实验2利用循环计算n个圆柱体体积。
    实验1编写求圆面积的程序,要求当输入的半径r<=0时,提示输入错误,要求r为浮点型,r的数值是动态的由键盘输入;
    例7-12
    例 7-11
    例7-9
    例7-8
    例7-7
    例7-6
  • 原文地址:https://www.cnblogs.com/hxq2003/p/5649529.html
Copyright © 2011-2022 走看看