• a+b>c?


    输入数字a,b,c。比较a+b和c的大小,a,b,c为任意整数。比如输入1111111111111111111111111,9,199999999999999999999999999。

    基本思想就是存在一个数组中,进行运算。然后比较。正数就前面加个‘+’,这样比较方便。

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    int cp;
    int j;
    int main()
    {
    int t;
    scanf("%d",&t);
    int tt=1;
    char str1[25],str2[25],str3[25];
    char str4[25],str5[25],strtt[25];
    memset(str1,0,sizeof(str1));
    memset(str2,0,sizeof(str2));
    memset(str3,0,sizeof(str3));
    memset(str4,0,sizeof(str4));
    memset(str5,0,sizeof(str5));
    memset(strtt,0,sizeof(strtt));
    int a,b,c;//字符串的长度 
    while(tt<t+1)
    {
    /**********如果不是负数就在前面加个'+'号***********/ 
    scanf("%s %s %s",str1,str2,str3);
    if(str1[0]>='0'&&str1[0]<='9')
    {
    strtt[0]='+';
    strcat(strtt,str1);
    strcpy(str1,strtt);
    memset(strtt,0,sizeof(strtt));
    }
    if(str2[0]>='0'&&str2[0]<='9')
    {
    strtt[0]='+';
    strcat(strtt,str2);
    strcpy(str2,strtt);
    memset(strtt,0,sizeof(strtt));
    }
    if(str3[0]>='0'&&str3[0]<='9')
    {
    strtt[0]='+';
    strcat(strtt,str3);
    strcpy(str3,strtt);
    memset(strtt,0,sizeof(strtt));
    }
    //printf("%s %s %s ",str1,str2,str3);
    /**********把长度长的赋值给str4,短的给str5***********/ 
    a=strlen(str1);
    b=strlen(str2);
    c=strlen(str3);
    if(a>=b){
    strcpy(str4,str1);
    strcpy(str5,str2);
    }
    else{
    strcpy(str4,str2);
    strcpy(str5,str1);
    }
    //printf("%s %s ",str4,str5);
    //printf("%d %d %d ",strlen(str1),strlen(str2),strlen(str3));

    cp=1;
    j=strlen(str5)-1;
    int strlen1=strlen(str4);
    int strlen2=strlen(str5);
    /**********如果str4,str5符号相同则相加***********/ 
    if(str4[0]==str5[0])
    {
    for(int i=strlen1-1;i>strlen1-strlen2;i--)
    {
    int temp,temp1,temp2;
    temp1=str4[i]-'0';

    temp2=str5[j]-'0';
    temp=temp1+temp2;
    if(cp==-1)temp++;
    if(temp>=10)
    {
    temp=temp%10;
    str4[i]=temp+'0';
    cp=-1;
    }
    else
    {
    str4[i]=temp+'0';
    cp=1;
    }
    j--;
    }

    // printf("%s ",str4);
    if(cp==-1)
    {
    for(int i=strlen(str4)-strlen(str5);i>0;i--)
    {
    int temp3=str4[i]-'0';
    if(cp==-1)temp3=temp3+1;
    if(temp3>=10)cp=-1;
    else cp=1;
    temp3=temp3%10;
    str4[i]=temp3+'0';
    }
    }
    // printf("%s ",str4);
    if(cp==-1)
    {
    strtt[0]='1';
    strcat(strtt,str4);
    strcpy(str4,strtt);
    char change=str4[0];
    str4[0]=str4[1];
    str4[1]=change;
    memset(strtt,0,sizeof(strtt));
    }
    // printf("相加后的数:");
    // printf("%s ",str4);
    }

    /**********如果str4,str5符号不同则相减***********/ 
    if(str4[0]!=str5[0])
    {
    if(strlen1==2&&strlen2==2){
    int faker=str4[1]-'0';
    int faker1=str5[1]-'0';
    if(faker>=faker1){faker=fabs(faker-faker1);str4[1]=faker+'0';}
    else {
    str4[0]=str5[0];
    faker=fabs(faker-faker1);str4[1]=faker+'0';
    }
    }
    else{
    //同位判断绝对值大小,大的减小的 
    if(strlen(str4)==strlen(str5)) 
    {
    int yy=strlen(str4);
    for(int iii=1;iii<yy;iii++)
    {
    if(str4[iii]<str5[iii])
    {
    char op[25];
    memset(op,0,sizeof(op));
    strcpy(op,str4);
    strcpy(str4,str5);
    strcpy(str5,op);
    break;
    }
    }
    }


    for(int i=strlen1-1;i>strlen1-strlen2;i--)
    {
    int temp,temp1,temp2;
    temp1=str4[i]-'0';

    temp2=str5[j]-'0';
    temp=temp1-temp2;
    if(cp==-1)temp--;
    if(temp<0)
    {
    temp=10+temp;
    str4[i]=temp+'0';
    cp=-1;
    }
    else
    {
    str4[i]=temp+'0';
    cp=1;
    }
    j--;
    }

    // printf("%s ",str4);
    if(cp==-1)
    {
    for(int i=strlen(str4)-strlen(str5);i>0;i--)
    {
    int temp3=str4[i]-'0';
    if(cp==-1)temp3=temp3-1;
    if(temp3<0){cp=-1;temp3=temp3+10;}
    else cp=1;

    str4[i]=temp3+'0';
    }
    }
    }
    }
    /**********去符号后的0,比如-999+999得到-000变为+0***********/ 
    int kk=strlen(str4);
    int ii=1;

    while(str4[ii]=='0'&&str4[ii+1]!='')
    {
    char change3=str4[0];
    str4[0]=str4[ii];
    str4[ii]=change3;
    int kk=strlen(str4);
    char ss[20];
    memset(ss,0,sizeof(ss));
    for(int m=0;m<kk-1;m++)
    ss[m]=str4[m+1];
    strcpy(str4,ss);
    }

    //printf("%s ",str4);


    /**********将str4与str3进行比较 **********/
    if(str4[0]=='+'&&str3[0]=='-')
    {
    printf("Case #%d: true ",tt++);
    }
    if(str4[0]=='-'&&str3[0]=='+')
    {
    printf("Case #%d: false ",tt++);
    }
    if(str4[0]==str3[0])
    {
    if(str4[0]=='+')
    {
    if(strlen(str4)>strlen(str3))printf("Case #%d: true ",tt++);
    else if(strlen(str4)<strlen(str3)) printf("Case #%d: false ",tt++);
    else{
    int h;
    for(h=0;h<strlen(str4);h++)
    {
    int temp6=str4[h]-'0';
    int temp7=str3[h]-'0';
    if(temp6>temp7){printf("Case #%d: true ",tt++);break;}
    else if(temp6<temp7){printf("Case #%d: false ",tt++);break;}
    }
    if(h>=strlen(str4))printf("Case #%d: false ",tt++);
    }
    }
    else
    {
    if(strlen(str4)>strlen(str3))printf("Case #%d: false ",tt++);
    else if(strlen(str4)<strlen(str3)) printf("Case #%d: true ",tt++);
    else{
    int h;
    for(h=0;h<strlen(str4);h++)
    {
    int temp6=str4[h]-'0';
    int temp7=str3[h]-'0';
    if(temp6>temp7){printf("Case #%d: false ",tt++);break;}
    else if(temp6<temp7){printf("Case #%d: true ",tt++);break;}
    }
    if(h>=strlen(str4))printf("Case #%d: false ",tt++);
    }
    }
    }

    }
    return 0;
    }

  • 相关阅读:
    linux的一些命令
    Java中小数精确计算
    java中基本数据类型和包装类自动装箱和拆箱
    Python学习day14(内置函数二,匿名函数)
    Python学习day13(内置函数一)
    Python学习day12(生成器,列表/生成器推导式)
    Python学习day11(函数名本质,闭包及迭代器)
    Python学习day10(函数名称空间及嵌套)
    Python学习day9(函数初识)
    Python学习day8(文件操作)
  • 原文地址:https://www.cnblogs.com/a842297171/p/4431881.html
Copyright © 2020-2023  润新知