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蛇耀、按價格排序并輸出
題目描述

一本圖書的信息有: 編號、書名坎弯、作者纺涤、出版社、出版日期抠忘、價格撩炊。設(shè)計一個結(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、乘積最大
題目描述

設(shè)有一個長度為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)在上枕,請你幫助你的好朋友設(shè)計一個程序咐熙,求得正確的答案。

輸入

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

輸出

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

樣例輸入

4 2
1231

樣例輸出

62

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

5悦施、星系炸彈
題目描述

在X星系的廣袤空間中漂浮著n個X星人造“炸彈”并扇,每個炸彈都可以設(shè)定多少天之后爆炸。例如:阿爾法炸彈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行,每行為對應(yīng)組中兩個單詞的公共前綴荆忍,或者【無公共前綴】格带。

樣例輸入

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叽唱、在指定位置增加圖書信息
題目描述

一本圖書的信息有: 編號屈呕、書名、作者棺亭、出版社虎眨、出版日期、價格镶摘。設(shè)計一個結(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ù)的 蠟燭。現(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è)特大整數(shù)不超過30位。參與操作的數(shù)據(jù)中乎完,被減數(shù)>減數(shù)熏兄。

算法分析:

1.初始化:將兩個特大整數(shù)輸入兩個字符數(shù)組,將兩個字符數(shù)組的各元素右移树姨,使最低位的元素位置對齊,高位補0桥状,為了存儲最高位的進位帽揪,位數(shù)多的數(shù)最高位前也應(yīng)補一個0。
2.從最低位對應(yīng)的數(shù)組元素開始將數(shù)字字符轉(zhuǎn)換為整型數(shù)據(jù)相加辅斟,因為數(shù)字字符‘0’對應(yīng)的ASCII值是48转晰,則:整型數(shù)據(jù)1+2,相當于 ('1'-48)+('2'-48)士飒,即'1'+'2'-96查邢。
3.將和整除以10,余數(shù)就是該位的結(jié)果酵幕,并轉(zhuǎn)換為字符(整型數(shù)據(jù)+48)存入該位,商就是進位數(shù)扰藕。
4.再對高一位對應(yīng)的數(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)系作者
  • 序言:七十年代末荷憋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子褐望,更是在濱河造成了極大的恐慌勒庄,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瘫里,死亡現(xiàn)場離奇詭異实蔽,居然都是意外死亡,警方通過查閱死者的電腦和手機谨读,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門局装,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人劳殖,你說我怎么就攤上這事铐尚。” “怎么了哆姻?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵宣增,是天一觀的道長。 經(jīng)常有香客問我矛缨,道長爹脾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任箕昭,我火速辦了婚禮灵妨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘落竹。我一直安慰自己泌霍,他們只是感情好,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布筋量。 她就那樣靜靜地躺著烹吵,像睡著了一般碉熄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上肋拔,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天锈津,我揣著相機與錄音,去河邊找鬼凉蜂。 笑死琼梆,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的窿吩。 我是一名探鬼主播茎杂,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼纫雁!你這毒婦竟也來了煌往?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤轧邪,失蹤者是張志新(化名)和其女友劉穎刽脖,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體忌愚,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡曲管,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了硕糊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片院水。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖简十,靈堂內(nèi)的尸體忽然破棺而出檬某,到底是詐尸還是另有隱情,我是刑警寧澤螟蝙,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布橙喘,位于F島的核電站,受9級特大地震影響胶逢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜饰潜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一初坠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧彭雾,春花似錦碟刺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽爽柒。三九已至,卻和暖如春者填,著一層夾襖步出監(jiān)牢的瞬間浩村,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工占哟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留心墅,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓榨乎,卻偏偏與公主長得像怎燥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蜜暑,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容