Primary Arithmetic
时间: 1ms 内存:64M
描述:
Children are taught to add multi-digit numbers from right to left, one digit at a time. Many find the ``carry" operation, where a 1 is carried from one digit position to the next, to be a significant challenge. Your job is to count the number of carry operations for each of a set of addition problems so that educators may assess their difficulty.
输入:
Each line of input contains two unsigned integers less than 10 digits. The last line of input contains ``0 0''.
输出:
For each line of input except the last, compute the number of carry operations that result from adding the two numbers and print them in the format shown below.
示例输入:
123 456
555 555
123 594
0 0
示例输出:
No carry operation.
3 carry operations.
1 carry operation.
提示:
参考答案(内存最优[752]):
#include <stdio.h>
#include <string.h>
void exchange( char a[], int b[] );
int main()
{
int a[20], b[20];
char c[20], d[20];
int i;
int count;
int t1, t2;
while( scanf("%s%*c%s", c, d) != EOF )
{
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
count = 0;
if( c[0] == '0' && d[0] == '0' )
{
break;
}
exchange(c, a);
exchange(d, b);
t1 = strlen(c);
t2 = strlen(d);
t1 = t2 > t1 ? t2 : t1;
for( i = 0; i < t1+1; i++ )
{
if( a[i] + b[i] > 9 )
{
a[i+1] += 1;
count++;
}
}
if(count == 0)
{
printf("No carry operation.\n");
}
if(count == 1)
{
printf("1 carry operation.\n");
}
if(count > 1)
{
printf("%d carry operations.\n",count);
}
}
return 0;
}
void exchange( char a[], int b[] )
{
int i;
for( i= strlen(a)-1 ; i >= 0; i-- )
{
b[strlen(a)-1-i] = a[i] - '0';
}
}
参考答案(时间最优[0]):
#include <cstdio>
int main()
{
long int a, b;
int carry, c;
while (scanf("%ld%ld", &a, &b) , a + b)
{
carry = c = 0;
while (a || b)
{
c = (a % 10 + b % 10 + c) > 9 ? 1 : 0;
carry += c;
a /= 10;
b /= 10;
}
if (carry == 0)puts("No carry operation.");
else if (carry == 1)puts("1 carry operation.");
else printf("%d carry operations.\n", carry);
}
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。