2019“西郵杯”初賽題解

1、加法變乘法
題目描述:

?已知X可以寫成從1開始連續(xù)若干個整數(shù)的和, 現(xiàn)在要求把其中兩個不相鄰的加號變乘號,使得結(jié)果為Y。找出所有滿足條件的可能答案并輸出(把兩個乘號左邊的數(shù)字用小括號括起來,中間用英文逗號間隔,兩個括號之間不空格);若找不到滿足的條件,則輸出“NONE”字樣。編寫程序,完成n組數(shù)據(jù)的判定。

例如:當X為1225,Y為2015時
因為:1+2+3+ ... + 49 = 1225
???1+2+3+...+1011+12+...+2728+29+...+49 = 2015
所以:一個解為(10,27)。

輸入

第一行為n值,接下來依次n行的第一個數(shù)據(jù)是加法結(jié)果X,第二個數(shù)據(jù)是變乘法后的結(jié)果Y,以空格間隔。

輸出

輸出n行,每一行的格式為“(,)(,)”(或者“NONE”)。請嚴格按照格式書寫,不能出現(xiàn)其它文字或符號。

樣例輸入

3
1225 2015
1224 2015
1275 2065

樣例輸出

(10,27)(16,24)
NONE
(10,27)(16,24)

題解:觀察題目,用X和Y減去變化的量,最后結(jié)果相同即滿足條件。

源代碼:

#include<stdio.h>
#include<string.h>
int main()
{
    int i,j;
    int x,y,n,flag;
    scanf("%d",&n);
    while(n--)
    {
        flag=1;
        scanf("%d %d",&x,&y);
        for(i=1;i<x;i++)
        {
            for(j=i+2;j<y;j++)
            {
                if(i*i-i+j*j-j-2==y-x)   //化簡后的結(jié)果
                {
                    flag=0;
                    printf("(%d,%d)",i,j);
                }
            }
        }
        if(flag==1)
        {
            printf("NONE"); 
        }
        printf("\n");
    }
}

2、互滿數(shù)

題目描述

編寫求因子和函數(shù),該函數(shù)返回形參n的因子之和。要求調(diào)用該因子和函數(shù),求出x范圍內(nèi)(包含x)所有的互滿數(shù)。所謂互滿數(shù)是指:如果有兩個數(shù),每一個數(shù)的所有因子之和恰好等于對方,則稱這兩個數(shù)為“互滿數(shù)”。

輸入

從鍵盤輸入一個正整數(shù)x。

輸出

從小到大依次輸出互滿數(shù),每對互滿數(shù)用小括號括起來(小數(shù)在前,大數(shù)在后),中間用英文逗號間隔,兩個括號之間不空格。

樣例輸入

10000

樣例輸出

(220,284)(1184,1210)(2620,2924)(5020,5564)(6232,6368)

本題剛開始我的思路是:用函數(shù)寫。先寫一個函數(shù)專門用來計算每個數(shù)的因子和,再在主函數(shù)里面利用循環(huán)和、引入函數(shù)、判斷條件的方式來找出一定范圍內(nèi)的互滿數(shù)。

源代碼:

#include<stdio.h>
int SUM(int n)
{
    int i,sum=0;
    for(i=1;i<=n/2;i++)
    {
        if(n%i==0)
        {
            sum=sum+i;
        }
    }
    return sum;
}
int main()
{
    int x;
    scanf("%d",&x);
    int i,j;
    int t1,t2;
    for(i=2;i<x;i++)
    {
        t1=SUM(i);
        for(j=i+1;j<x;j++)
        {
            t2=SUM(j);
            if(t1==j && t2==i && i!=j)
            {
                printf("(%d,%d)",i,j);
            }
        }
    }

}

但是這樣的代碼由于循環(huán)嵌套的過多,導致過大的數(shù)字運行速度非常慢,會超時,所以這樣的方法是無法提交正確的。

后來咨詢了大佬,大佬給了一個相對我的而言比較優(yōu)化的代碼:

#include<stdio.h>
int main()
{
    int x;
    scanf("%d",&x);
    int i,j,k;
    int sum1=0,sum2=0;
    for(i=2;i<=x;i++)
    {
        sum1=0,sum2=0;
        for(j=1;j<=i/2;j++)
        {
            if(i%j==0)
            {
                sum1=sum1+j;
            }
        }
        if(i>=sum1)
            continue;   //減少重復
        for(k=1;k<=sum1/2;k++)
        {
            if(sum1%k==0)
            {
                sum2=sum2+k;
            }
        }
        if(sum2==i)
        {
            printf("(%d,%d)",sum1<sum2?sum1:sum2,sum1>sum2? sum1:sum2);    //雙目運算:第二個逗號之前 比較sum1和sum2的大小,如果sum1比sum2小,則輸出sum1。 第二個逗號之后  比較sum1和sum2的大小,如果sum1比sum2大,則輸出sum1。
        }
    }
 } 
3、按價格排序并輸出
題目描述

一本圖書的信息有: 編號、書名、作者、出版社、出版日期、價格。設計一個結(jié)構(gòu)體類型描述圖書信息,并實現(xiàn)輸入多本(不超過20本)圖書信息,存儲在該結(jié)構(gòu)體的數(shù)組變量中,按價格從低到高排序并輸出圖書信息。

輸入

第一行輸入圖書的本數(shù),以后每行輸入一本圖書的信息;每本圖書信息的輸入說明如下:輸入時,各個信息之間空格間隔;編號為整數(shù);書名、作者、出版社均為長度不超過20的字符串;出版日期的輸入格式為yyyy-mm-dd,例如(2017-5-2);價格為實數(shù)。

輸出

以列表方式輸出:(注意,輸出中除了漢字外,其他符號均為英文符號
第一行輸出標題行,分別輸出:“編號”、“書名”、“作者”、“出版社”、“出版日期”、“價格”;相鄰兩項之間以一個空格間隔。(參見樣例)
以后每行輸出一本書,依次輸出<編號>,<書名>,<作者>,<出版社>,<出版日期>,<價格(小數(shù)點后保留2位)>,相鄰兩項之間以一個空格間隔。(參見樣例)

樣例輸入

4
2 數(shù)據(jù)結(jié)構(gòu) 耿國華 高等教育出版社 2005-7-1 28.00
4 大學英語 LEE 清華出版社 1990-4-1 34.6
6 草莓點心 噼里啪啦 二十一世紀出版社 2008-8-8 18.00
7 車來了 噼里啪啦 二十一世紀出版社 2008-9-9 18.50

樣例輸出

編號 書名 作者 出版社 出版日期 價格
6 草莓點心 噼里啪啦 二十一世紀出版社 2008年8月8日 18.00
7 車來了 噼里啪啦 二十一世紀出版社 2008年9月9日 18.50
2 數(shù)據(jù)結(jié)構(gòu) 耿國華 高等教育出版社 2005年7月1日 28.00
4 大學英語 LEE 清華出版社 1990年4月1日 34.60

本題就是簡單的結(jié)構(gòu)體的運用,冒泡排序的運用

代碼源:

#include<stdio.h>
struct Book
{
    int num;
    char name[20];
    char editor[20];
    char pub[40];
    int year;
    int moth;
    int day;
    float price;
};
int main()
{
    int n;
    scanf("%d",&n);
    struct Book book[n];
    struct Book t;
    int i,j;
    for(i=0;i<n;i++)
    {
        scanf("%d",&book[i].num);
        scanf("%s",book[i].name);
        scanf("%s",book[i].editor);
        scanf("%s",book[i].pub);
        scanf("%d-%d-%d",&book[i].year,&book[i].moth,&book[i].day);
        scanf("%f",&book[i].price);
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n-1-i;j++)
        {
            if(book[j].price>book[j+1].price)
            {
                t=book[j];
                book[j]=book[j+1];
                book[j+1]=t;
            }
        }
    }
    printf("編號 書名 作者 出版社 出版日期 價格\n");
    for(i=0;i<n;i++)
    {
        printf("%d ",book[i].num);
        printf("%s ",book[i].name);
        printf("%s ",book[i].editor);
        printf("%s ",book[i].pub);
        printf("%d年%d月%d日 ",book[i].year,book[i].moth,book[i].day);
        printf("%0.2f\n",book[i].price);
    }
}
4、乘積最大
題目描述

設有一個長度為N的數(shù)字串,要求選手使用K個乘號將它分成K+1個部分,找出一種分法,使得這K+1個部分的乘積能夠為最大。
同時,為了幫助選手能夠正確理解題意,主持人還舉了如下的一個例子:
有一個數(shù)字串:312, 當N=3,K=1時會有以下兩種分法:
1、3 x12=36
2、31 x 2=62
這時,符合題目要求的結(jié)果是:31*2=62。
現(xiàn)在,請你幫助你的好朋友設計一個程序,求得正確的答案。

輸入

輸入共有兩行:
第一行共有2個自然數(shù)N,K(4≤N≤10,1≤K≤5)。
第二行是一個長度為N的數(shù)字串。

輸出

一個整數(shù),表示所求得的最大乘積。

樣例輸入

4 2
1231

樣例輸出

62

本題要運用動態(tài)規(guī)劃
暫時沒有完成,等更新......

5、星系炸彈
題目描述

在X星系的廣袤空間中漂浮著n個X星人造“炸彈”,每個炸彈都可以設定多少天之后爆炸。例如:阿爾法炸彈2015年1月1日放置,定時為15天,則它在2015年1月16日,星期五爆炸。

輸入

第一行為n值,以后連續(xù)n行為炸彈放置日期(格式為 年-月-日)和定時天數(shù)(整型)。

輸出

輸出n行,每行為爆炸的準確日期(格式為 yyyy年mm月dd日 星期幾),日期和星期之間用一個空格隔開。請嚴格按照格式書寫,不能出現(xiàn)其它文字或符號。

提示信息:

星期的數(shù)據(jù)集合是【星期日、星期一、星期二、星期三、星期四、星期五、星期六】。1900年1月1日,是星期一。

樣例輸入

2
1999-9-9 800
2014-11-9 1000

樣例輸出

2001年11月17日 星期六
2017年08月05日 星期六

該題及為時間計算題,要注意對平年閏年的推導計算和星期的推導計算

代碼源:

#include<stdio.h>
void DAY(int year,int month,int day,int days)
{
    char week[7][10]={"星期一","星期二","星期三","星期四","星期五","星期六","星期日"}; 
    int monthday[12]={31,28,31,30,31,30,31,31,30,31,30,31}; 
    int i;
    int s=0,t;
    for(i=0;i<days;i++)
    {
        day++;
        if(day>monthday[month-1])
        {
            day=1;
            month++;
            if(month==13)
            {
                month=1;
                year++;
                if((year%4==0 && year%100!=0) ||year%400==0)
                {
                    monthday[1]=29;
                }
                else
                    monthday[1]=28;
            }
        }
    }
    if(month>9 && day>9)
    {
        printf("%d年%d月%d日 ",year,month,day);
    }
    if(month>9 && day<=9)
    {
        printf("%d年%d月0%d日 ",year,month,day);
    }
    if(month<=9 && day>9)
    {
        printf("%d年0%d月%d日 ",year,month,day);
    }
    else if(month<=9 && day<=9)
    {
        printf("%d年0%d月0%d日 ",year,month,day);
    }
    for(i=1990;i<year;i++)
    {
        if((i%4==0 && i%100!=0) ||i%400==0)
        {
            s=s+366;
        }
        else
            s=s+365;
    }
    if((year%4==0 && year%100!=0) ||year%400==0)
        monthday[1]=29;
    else
        monthday[1]=28;
    for(i=0;i<month-1;i++)
    {
        s=s+monthday[i];
    }
    s=s+day-1;
    t=s%7;
    printf("%s",week[t]);
 } 
 
 int main()
 {
    int n;
    int year,month,day,days;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%d-%d-%d %d",&year,&month,&day,&days);
        DAY(year,month,day,days);
        printf("\n");
     }
 }
6、字符串求解前綴
題目描述

給定n組字符串,每組兩個字符串,以空格分開。找出這組兩個字符串的公共前綴,并輸出。

輸入

第一行輸入組數(shù)n,之后的n行,每行輸入兩個單詞,這兩個單詞以空格分隔。

輸出

輸出n行,每行為對應組中兩個單詞的公共前綴,或者【無公共前綴】。

樣例輸入

2
come component
shanxi beijing

樣例輸出

com
無公共前綴

提示

待統(tǒng)計的數(shù)據(jù)個數(shù)不超過10對,每個字符串的長度不超過20。

代碼源:

#include<stdio.h>
#include<string.h>
int main()
{
    int n;
    scanf("%d",&n);
    char str1[10];
    char str2[10];
    char str[10];
    int i,j,flag,t=0;
    while(n--)
    {
        scanf("%s %s",&str1,&str2);
        int len1=strlen(str1);
        int len2=strlen(str2);
            for(i=0;i<len1;i++)
            {
                if(str1[0]!=str2[0])
                {
                    flag=1;
                    break;
                }
                else if(str1[i]==str2[i])
                {
                    flag=0;
                    t++;
                    str[i]=str1[i];
                }   
                else break;
            }
            if(flag!=0)
            {
                printf("無公共前綴\n");
            }
            else if(flag==0)
            {
                printf("%s\n",str);
            }
    }
}
7、在指定位置增加圖書信息
題目描述

一本圖書的信息有: 編號、書名、作者、出版社、出版日期、價格。設計一個結(jié)構(gòu)體類型描述圖書信息,并實現(xiàn)輸入多本(不超過20本)圖書信息,存儲在該結(jié)構(gòu)體的數(shù)組變量中。在增加加一本圖書到指定位置并輸出增加后的結(jié)果。

輸入

第一行輸入圖書的本數(shù)n。
以后的n行,每行輸入一本圖書的信息;每本圖書信息的輸入說明如下:輸入時,各個信息之間空格間隔;編號為整數(shù);書名、作者、出版社均為長度不超過30的字符串;出版日期的輸入格式為yyyy-mm-dd,例如(2017-5-2);價格為實數(shù)。
第n+2行輸入一個整數(shù)m,表示增加的圖書將成為第m本圖書。
第n+3行輸入待增加圖書的各項信息,格式同上。

輸出

以列表方式輸出增加后的結(jié)果:(注意,輸出中除了漢字外,其他符號均為英文符號)
第一行輸出標題行,分別輸出:“編號”、“書名”、“作者”、“出版社”、“出版日期”、“價格”;相鄰兩項之間以一個空格間隔。(參見樣例)
以后每行輸出一本書,依次輸出<編號>,<書名>,<作者>,<出版社>,<出版日期>,<價格(小數(shù)點后保留2位)>,相鄰兩項之間以一個空格間隔。(參見樣例)

樣例輸入

3
2 數(shù)據(jù)結(jié)構(gòu) 耿國華 高等教育出版社 2005-7-1 28.00
4 大學英語 LEE 清華出版社 1990-4-1 34.6
7 車來了 噼里啪啦 二十一世紀出版社 2008-9-9 18.50
3
1 高等數(shù)學 張三 高等教育出版社 1994-5-1 18.50

樣例輸出

編號 書名 作者 出版社 出版日期 價格
2 數(shù)據(jù)結(jié)構(gòu) 耿國華 高等教育出版社 2005年7月1日 28.00
4 大學英語 LEE 清華出版社 1990年4月1日 34.60
1 高等數(shù)學 張三 高等教育出版社 1994年5月1日 18.50
7 車來了 噼里啪啦 二十一世紀出版社 2008年9月9日 18.50

這道題同第3題有些類似,但因為這道題增加了插入操作,所以我覺得可能用鏈表寫會簡單一點,但是我實在是鏈表不精通,所以這個題我依然用的是結(jié)構(gòu)體數(shù)組的插入方法完成的,等后面如果我用鏈表完成了再來更新。

代碼源:

#include<stdio.h>
struct BOOK
{
    int num;
    char name[30];
    char editor[30];
    char pub[60];
    int year;
    int month;
    int day;
    float price;
};
int main()
{
    int n,m;
    scanf("%d",&n);
    struct BOOK book[10];
    struct BOOK t[10];
    int i,j;
    for(i=0;i<n;i++)
    {
        scanf("%d",&book[i].num);
        scanf("%s",book[i].name);
        scanf("%s",book[i].editor);
        scanf("%s",book[i].pub);
        scanf("%d-%d-%d",&book[i].year,&book[i].month,&book[i].day);
        scanf("%f",&book[i].price);
    }
    scanf("%d",&m);
    n=n+1;
    scanf("%d",&t[m-1].num);
    scanf("%s",t[m-1].name);
    scanf("%s",t[m-1].editor);
    scanf("%s",t[m-1].pub);
    scanf("%d-%d-%d",&t[m-1].year,&t[m-1].month,&t[m-1].day);
    scanf("%f",&t[m-1].price);
    for(i=0;i<n;i++)
    {
        if(i<m-1)
        {
            t[i]=book[i];
        }
        else if(i>m-1)
        {
            t[i]=book[i-1];
        }
    }
    printf("編號 書名 作者 出版社 出版日期 價格\n");
    for(j=0;j<n;j++)
    {
        printf("%d ",t[j].num);
        printf("%s ",t[j].name);
        printf("%s ",t[j].editor);
        printf("%s ",t[j].pub);
        printf("%d年%d月%d日 ",t[j].year,t[j].month,t[j].day);
        printf("%0.2f\n",t[j].price);
    }
}
8、 黑色星期五
題目描述

有些西方人比較迷信,如果某個月的13號正好是星期五,他們就會覺得不太吉利,用古人的說法,就是“諸事不宜”。請你編寫一個程序,統(tǒng)計出在某個特定的年份中,出現(xiàn)了多少次既是13號又是星期五的情形,以幫助你的迷信朋友解決難題。
說明:
(1)一年有365天,閏年有366天,所謂閏年,即能被4整除且不能被100整除的年份,或是既能被100整除也能被400整除的年份;
(2)已知1998年1月1日是星期四,用戶輸入的年份肯定大于或等于1998年。

輸入

輸入只有一行,即某個特定的年份(大于或等于1998年)。

輸出

輸出只有一行,即在這一年中,出現(xiàn)了多少次既是13號又是星期五的情形,格式為【****年有*個黑色星期五】。

樣例輸入

1998

樣例輸出

1998年有3個黑色星期五

該題思想同第五題

代碼源:

#include<stdio.h>
int DAY(int year)
{
//  char week[7][20]={"星期四","星期五","星期六","星期日","星期一","星期二","星期三"}; 
    int monthday[12]={31,28,31,30,31,30,31,31,30,31,30,31}; 
    int i,j,t=0,s=0;
    if((year%4==0 && year%100!=0) ||year%400==0)
    {
        monthday[1]=29;
    }
    else
        monthday[1]=28;
    for(i=1998;i<year;i++)
    {
        if((i%4==0 && i%100!=0) ||i%400==0)
        {
            s=s+366;
        }
        else
            s=s+365;
    }
    for(i=0;i<12;i++)
    {
        if(i==0)
        {
            j=(s+13)%7-1;
        }
        else
        {   s=s+monthday[i-1];
            j=(s+13)%7-1;
        }
        if(j==1)
        {
            t++;
        }   
    }
    return t;
} 
int main()
{
    int year;
    scanf("%d",&year);
    int t;
    t=DAY(year);
    printf("%d年有%d個黑色星期五",year,t);
}
9.生日蠟燭
題目描述

某君從某年開始每年都舉辦一次生日party,并且每次都要吹熄與年齡相同根數(shù)的 蠟燭?,F(xiàn)在算起來,他一共吹熄了N根蠟燭。請問,他從多少歲開始辦生日party的,現(xiàn)在他多少歲?
例如:若N=236,因為236=26+27+28+29+30+31+32+33,所以,他從26歲開始辦生日party,他現(xiàn)在33歲。

輸入

輸入一共吹熄的蠟燭數(shù)N。

輸出

輸出他辦生日party的起止年齡數(shù),以空格隔開;若有多種情況,輸出起始年齡最小的一種情況。

樣例輸入

236

樣例輸出

26 33

代碼源:

#include<stdio.h>
int main()
{
    int i=1,j,sum=0;
    int n;
    scanf("%d",&n);
    while(sum!=n)
    {
        for(j=i;;j++)
        {
            sum=sum+j;
            if(sum==n)
            {
                printf("%d %d",i,j);
                break;
            }
            else if(sum>n)
            {
                sum=0;
                break;
            }
         } 
        i++;
    }
 } 
10、.特大整數(shù)的精確相加和相減
題目描述

特大整數(shù)用長整型也存不下,如果用雙精度實型存儲則會造成誤差,可以用字符數(shù)組存儲所有位,再按十進制由低到高逐位相加,同時考慮進位。

特別提示:

假設特大整數(shù)不超過30位。參與操作的數(shù)據(jù)中,被減數(shù)>減數(shù)。

算法分析:

1.初始化:將兩個特大整數(shù)輸入兩個字符數(shù)組,將兩個字符數(shù)組的各元素右移,使最低位的元素位置對齊,高位補0,為了存儲最高位的進位,位數(shù)多的數(shù)最高位前也應補一個0。
2.從最低位對應的數(shù)組元素開始將數(shù)字字符轉(zhuǎn)換為整型數(shù)據(jù)相加,因為數(shù)字字符‘0’對應的ASCII值是48,則:整型數(shù)據(jù)1+2,相當于 ('1'-48)+('2'-48),即'1'+'2'-96。
3.將和整除以10,余數(shù)就是該位的結(jié)果,并轉(zhuǎn)換為字符(整型數(shù)據(jù)+48)存入該位,商就是進位數(shù)。
4.再對高一位對應的數(shù)組元素操作,將該位數(shù)字字符轉(zhuǎn)換為整型相加,并與低位的進位數(shù)相加,將和整除以10,余數(shù)就是該位的結(jié)果,商就是本位的進位數(shù)。
5.重復4直到最高位。如果最高位相加時進位數(shù)大于0則將此進位數(shù)轉(zhuǎn)換為字符存入最高位。

輸入

第一行待運算的表達式個數(shù)n,之后連續(xù)的2n行每相鄰得兩行為一組。

輸出

依次輸出運算結(jié)果,共輸出2n行。前n行為相加的運算結(jié)果;后n行為相減的運算結(jié)果,每個結(jié)果獨占一行。

樣例輸入

3
123456789
23456789
999999999
999999999
1000000000
9999

樣例輸出

146913578
1999999998
1000009999
100000000
0
999990001

代碼源:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
 
void swap(char target[]) {
    int i;
    int j;
    char temp;
 
    for(i = 0,j = strlen(target) - 1;i <= j;i++,j--) {
        temp = target[i];
        target[i] = target[j];
        target[j] = temp;
    }
}
 
void BigNumAdd(char a[],char b[]) {
    int i;
    char c[1001] = {0};
 
    swap(a);
    swap(b);
 
    for(i = 0;i < strlen(a) && i < strlen(b);i++) {
        c[i] += a[i] + b[i] - '0';
        if(c[i] - '0' >= 10){
            c[i] = c[i] - 10;
            c[i+1] = 1;
        }
    }
    
    if(strlen(a) == strlen(b)) {
        if(c[i] == 1) 
            c[i]='1';
    }
    
    if(strlen(a) > strlen(b)){
        if(c[i] == 1) {
            for(;i < strlen(a);i++){
                c[i] += a[i];
                if(c[i] - '0' >= 10) {
                    c[i] = c[i] - 10;
                    c[i+1] = 1;
                }
            }   
 
            if(c[i-1] == '0')
                c[i] = '1';
        }
        else { 
            for(;i < strlen(a);i++)
                c[i] = a[i];
        }
    }
 
    if(strlen(b) > strlen(a)){
        if(c[i]==1){
            for(;i < strlen(b);i++){
                c[i] += b[i];
                if(c[i] - '0' >= 10){
                    c[i] = c[i] - 10;
                    c[i+1] = 1;
                }
            }
            if(c[i] == 1)
                c[i] = '1';
        } else { 
            for(;i < strlen(b);i++)
                c[i] = b[i];
        }
    }
    swap(c);
 
    printf("%s\n",c);
}
 
void BigNumChange(char *str1, char *str2) {
    int len1 = strlen(str1);  
    int len2 = strlen(str2);  
    int i;  
    int *num1 = (int*)malloc(len1*sizeof(int));  
    int *num2 = (int*)malloc(len1*sizeof(int));  
 
    if(str1 == NULL || str2 == NULL) 
        return;  
    
    for (i = 0; i < len1; i++)  
    {  
        num1[i] = num2[i] = 0;  
    }  
    for (i = len1 - 1; i >= 0; i--)  
    {  
        num1[len1 - 1 - i] = str1[i] - '0';  
    }  
    for (i = len2 - 1; i >= 0; i--)  
    {  
        num2[len2-1-i] = str2[i] - '0';  
    }  
    for (i = 0; i < len1; i++)  
    {  
        num1[i] = num1[i] - num2[i];  
        if(num1[i] < 0)  
        {  
            num1[i] = num1[i] + 10;  
            num1[i+1] = num1[i+1] - 1;  
        }  
    }  
    for (i = len1-1; i>=0 && num1[i] == 0; i--)  
        ;  
    if(i >= 0)  
        for (; i >= 0; i--)  
        {  
            printf("%d",num1[i]);  
        }  
    else  
        printf("0");  
 
}  
 
int main(void) {
    int n;
    char a[100][100];
    int i;
    int len1;
    int len2;
 
    scanf("%d",&n);
    for(i = 0;i < 2*n;i++) {
        scanf("%s",a[i]);
    }
    
    for(i = 0;i < 2*n;i += 2) {
        BigNumAdd(a[i],a[i+1]);
    }
 
    for(i = 0;i < 2*n;i++) {
        swap(a[i]);
    }
 
    for(i = 0;i < 2*n;i += 2) {
        len1 = strlen(a[i]);
        len2 = strlen(a[i+1]);
        if(len1 > len2) {
            BigNumChange(a[i],a[i+1]);
        } else if(len1 < len2) {
            printf("-");
            BigNumChange(a[i+1],a[i]);
        } else {
            if(strcmp(a[i],a[i+1]) >= 0) {
                BigNumChange(a[i],a[i+1]);
            } else {
                printf("-");
                BigNumChange(a[i+1],a[i]);
            }
        }
        printf("\n");
    }
    return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容