当前位置:   article > 正文

指针-数的互逆

指针-数的互逆

任务描述

定义一个数的逆如下:两个数互为逆,当且仅当它们的绝对值位数相同且各位对应数字之和为 9。例如:11 和 −88 互为逆,999 和 000 互为逆,但 999 和 0 不互为逆。

现在给出多组数对,请编程判断每对数是否互为逆。如果是,请输出它们的和;如果不是,请输出“illegal operation”

相关知识

参考之前的关卡。

编程要求

根据提示,在右侧编辑器的Begin-End区域内补充代码。

测试说明

输入:第一行为数据组数 T,T∈[1,100];接下来 T 行,每行 2 个数 a 和 b (∣a∣,∣b∣∈[0,10100]),以一个空格分隔。a,b 可能有前导 0 ,仅负数带符号。

输出:对于每组数据,如果 a 和 b 互为逆,输出它们的和 (无前导 0,仅负数有符号);否则输出“illegal operation”

例如测试集 1 的输入是: 5 01 98 -100 899 233 332 00000000000001 -99999999999998 -45454 54545

测试集 1 的运行结果为: 99 799 illegal operation -99999999999997 9091

  1. #include <stdio.h>
  2. #include <string.h>
  3. char result[1000];
  4. char *sub(char *a, char *b)
  5. {
  6. int c=0,n;
  7. while(*(a+c)!='\0')
  8. c++;
  9. c--;
  10. n=c;
  11. for(;c>=0;c--)
  12. {
  13. if(*(a+c)-*(b+c)>=0)
  14. {
  15. result[c]=*(a+c)-*(b+c)+'0';
  16. }
  17. else if(*(a+c)-*(b+c)<0)
  18. {
  19. *(a+c-1)=*(a+c-1)-'1'+'0';
  20. result[c]=*(a+c)-*(b+c)+'9'-'0'+'1';
  21. }
  22. }
  23. while(result[0]=='0')
  24. {
  25. for(c=0;c<=n;c++)
  26. result[c]=result[c+1];
  27. result[n]='\0';
  28. n--;
  29. }
  30. return(result);
  31. }
  32. int main()
  33. {
  34. char sa[1000], sb[1000];
  35. char *a, *b;
  36. int signa, signb;
  37. int i, t, la, lb;
  38. scanf("%d", &t);
  39. while (t--)
  40. {
  41. scanf("%s%s", sa, sb);
  42. a = (sa[0] == '-') ? sa + 1 : sa;
  43. b = (sb[0] == '-') ? sb + 1 : sb;
  44. signa = (sa[0] == '-') ? 1 : 0;
  45. signb = (sb[0] == '-') ? 1 : 0;
  46. la = strlen(a);
  47. lb = strlen(b);
  48. if (la != lb)
  49. printf("illegal operation\n");
  50. else
  51. {
  52. int flag = 1;
  53. for (i = 0; i < la; i++)
  54. {
  55. if (a[i] + b[i] - '0' - '0' != 9)
  56. {
  57. printf("illegal operation\n");
  58. flag = 0;
  59. break;
  60. }
  61. }
  62. if (flag == 0)
  63. {
  64. continue;
  65. }
  66. if (signa == 1 && signb == 1)
  67. {
  68. printf("-");
  69. for (i = 0; i < la; i++)
  70. printf("9");
  71. printf("\n");
  72. }
  73. else if (signa == 0 && signb == 0)
  74. {
  75. for (i = 0; i < la; i++)
  76. printf("9");
  77. printf("\n");
  78. }
  79. else if (signa == 0 && signb == 1)
  80. {
  81. if (strcmp(a, b) >= 0)
  82. printf("%s\n", sub(a, b));
  83. else
  84. printf("-%s\n", sub(b, a));
  85. }
  86. else
  87. {
  88. if (strcmp(b, a) >= 0)
  89. printf("%s\n", sub(b, a));
  90. else
  91. printf("-%s\n", sub(a, b));
  92. }
  93. }
  94. }
  95. }

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/512357
推荐阅读
相关标签
  

闽ICP备14008679号