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;
}