4

我必须在 C 中从标准输入中读取两个数字作为字符串。我怎样才能将它们的总和也打印为字符串?我有:

char a[10],b[10];
printf("enter the two numbers");
scanf("%s%s",&a,&b);
char sum[20];
sum=?

给点小费好吗?谢谢!

4

5 回答 5

2

就像在小学一样

假设输入是“...69 + ...63”

9 + 3     = 2 and 1 to go
6 + 6 + 1 = 3 and 1 to go
...
于 2013-02-13T18:51:34.107 回答
2

除非禁止这样做,否则我将采用以下方法:

  • 将输入字符串转换为数字。我会尝试strtol()

  • 添加数字

  • 将总和从数字转换为字符串。我会尝试snprintf()

于 2013-02-13T19:44:59.443 回答
2

就像在纸上做的那样,用编程来做这件事。迈出小步,并在不注意的情况下明确我们在纸上所做的每一个小步骤。

    00111
 ---------
     12345
 123456789
 ---------
 123469134
  • 注意不同的长度。您需要单独的变量来保存该信息。您需要找出这两个长度 - 要么使用标准函数,要么编写自己的:字符串以二进制结尾0
  • 注意我们在添加时是如何倒退的。您必须维护两个索引才能访问两个字符串(字符数组)。
  • 请注意我们如何结转加法的高位5+9=14。您需要在另一个变量中维护它。

使用循环。添加后,您需要知道总长度,并将其移动到左边缘。因为我们事先不知道我们会得到什么长度,所以您将从sum数组的右边缘开始写下答案。想一想,您可以如何以及如何改进这一点。

于 2013-02-13T19:03:29.280 回答
1

使用 将字符串转换为数字atoi,然后将它们相加,然后使用 printf 之类的打印函数打印总和。看到这个

于 2013-02-13T18:47:43.500 回答
1

chars是 8 位二进制数,就像更小的ints. 我们必须解释它们以赋予它们作为字母的意义。

您的计算机可能使用 ASCII 标准。在 ASCII 中,char代表字符的值0实际上并没有数值 0。它是 48。幸运的是,数字都是连续的,所以1是 49,等等。

char zero = '0';
printf("%d\n", zero);
char one = '1';
printf("%d\n", one);

> 48
> 49

(请注意,%d格式标志的printf意思是“解释为整数”。)

因为chars是数字,我们可以用它们做数学运算。

char one = '1';
int one_num = one - '0';
printf("%d\n", one_num);

> 1

现在,您可以像在纸上一样使用十进制数字实现加法并携带。

于 2013-02-13T19:30:25.493 回答