浙江大学06计算机上机题(含答案)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、还是A+B

题目描述:

读入两个小于10000的正整数A和B,计算A+B。需要注意的是:如果A和B的末尾K(不超过8)位数字相同,请直接输出-1。

输入:

测试输入包含若干测试用例,每个测试用例占一行,格式为"A B K",相邻两数字有一个空格间隔。当A和B同时为0时输入结束,相应的结果不要输出。

输出:

对每个测试用例输出1行,即A+B的值或者是-1。

样例输入:

1 2 1

11 21 1

108 8 2

36 64 3

0 0 1

样例输出:

3

-1

-1

100

答案:

麻烦的做法,欢迎交流

1.#include

2.#include

3.#include

4.#include

5.

ing namespace std;

7.

8.void split(int num,int k,char *str)

9.{

10. int i;

11. for (i=0;i

12. {

13. str[i]=num%10;

14. num/=10;

15. }

16. str[i]='\0';

17.}

18.int main()

19.{

20. int a,b,k;

21. char cha[10],chb[10];

22. //fstream cin("1015.txt");

23. while (cin>>a>>b,a+b)

24. {

25. cin>>k;

26. split(a,k,cha);

27. split(b,k,chb);

28. string stra(cha);

29. string strb(chb);

30. if (stra==strb)

31. {

32.

33. cout<<"-1"<

34. }

35. else

36. {

37. cout<

38. }

39. }

40. return 0;

41.}

另:

2.#include

3.#include

4.

ing namespace std;

6.

7.int a,b,k;

8.

9.int main()

10.{

11. while(cin>>a>>b>>k)

12. {

13. if(a == 0 && b == 0)break;

14. int flag = 1;

15. int t = a,t1 = b;

16. while(k--)

17. {

18. int r = t%10;

19. t/=10;

20. int r1 = t1%10;

21. t1/=10;

22. if(r!=r1){flag = 0; break;}

23. }

24. if(!flag)printf("%d\n",a+b);

25. else printf("-1\n");

26. }

27. return 0;

28.}

另:

简单位运算代码

2.

3.int a,b,k;

4.int main()

5.{

6. while(scanf("%d %d %d",&a,&b,&k))

7. {

8. if(0 == a && 0 == b) break;

9. if(a << (32 - k) == b << (32 - k)) printf("-1\n");

10. else printf("%d\n",a+b);

11. }

12. return 0;

13.}

题目是要求末尾k位数字相同,而不是转成二进制后的末尾k位相同。可以几组case试试:138 8 1;138 4 1;138 2 1;

另:

//AC

#include

#include

int main()

{

int a,b,i,j,n;

char s1[10],s2[10],s3[8],s4[8];

while(scanf("%d%d%d",&a,&b,&n),a||b)

{

sprintf(s1,"%08d",a);

sprintf(s2,"%08d",b);

for(i=strlen(s1)-1,j=0;i>=strlen(s1)-n;i--,j++)

s3[j]=s1[i]; s3[j]='\0';

for(i=strlen(s2)-1,j=0;i>=strlen(s2)-n;i--,j++)

s4[j]=s2[i]; s4[j]='\0';

if(!strcmp(s3,s4)) printf("-1\n");

else printf("%d\n",a+b);

}

相关文档
最新文档