首页 > ACM题库 > HDU-杭电 > HDU 1229 还是A+B[解题报告] C++
2013
12-04

HDU 1229 还是A+B[解题报告] C++

还是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

  水题,首先把两个数组的的长度设为一样的,即空位补零,数字在数组中以右对齐方式存储。

  代码如下:

#include <cstdlib>
 #include <cstring>
 #include <cstdio>
 using namespace std;
 
 int main()
 {
     char a[10], b[10], aa[10], bb[10];
     int bit, num1, num2;
     while( 1 )
     {
         memset( a, '0', sizeof( a ) );
         memset( b, '0', sizeof( b ) );
         scanf( "%s %s", a, b );
         if( a[0] == '0' && b[0] == '0' )
             break;
         strcpy( aa, a );
         strcpy( bb, b );
         scanf( "%d", &bit );
         int len1 = strlen( a ), len2 = strlen( b );
         a[len1] = b[len2] = '0';
         for( int i = len1 - 1, j = 8; i >= 0; --i, --j )
         {
             a[j] = a[i];
             a[i] = '0';
         }
         for( int i = len2 - 1, j = 8; i >= 0; --i, --j )
         {
             b[j] = b[i];
             b[i] = '0';
         }
         a[9] = b[9] = '\0';
         if( strcmp( a + 9 - bit, b + 9 - bit ) )
         {
             num1 = atoi( aa );
             num2 = atoi( bb );
             printf( "%d\n", num1 + num2 );
         }
         else
             puts( "-1" );
     }
     return 0;
 }