为什么程序返回错误的答案?

时间:2017-10-16 20:44:24

标签: c

我刚开始学习C所以我不知道我在做什么。我正在编写一个程序,根据变量k将数字的倍数加在一起(即x + 10x + 100x ......)。 n是要添加/相乘的数字。有人能告诉我这件事我做错了吗?当输入n为12且输入k为3时,它应输出13332但输出13200.谢谢!

#include <stdio.h>
int main() {
    int n;
    int k;
    scanf("%d", &n);
    scanf("%d", &k);
    int i = 0;
    int t;
    while (i < k) {
        t = n + (n * 10);
        n = n * 10;
        i++;
    }
    printf("%d", t);
}

2 个答案:

答案 0 :(得分:4)

您设置变量t而不是添加变量 使用+=添加计算的金额 您也可以只添加n,因为n * 10将在下次迭代时添加(如果需要)。
您还应该将t设置为0,因为目前它尚未初始化并且将保留不可预测的垃圾值。

#include <stdio.h>
int main() {
    int n;
    int k;
    scanf("%d", &n);
    scanf("%d", &k);
    int i = 0;
    int t = 0;
    while (i < k) {
        t += n; // See here?
        n = n * 10;
        i++;
    }
    printf("%d", t);
}

此外,为清楚起见,我建议您:

  1. 使变量名称更具描述性 - total而不是t等。
  2. 打印输入消息(&#34;请插入...&#34;) - 它们对用户更好,并且还可以使nk更加明亮即使您没有将其更改为amountinitialNumber
  3. 等内容

答案 1 :(得分:0)

使用t = n + (n * 10);,每次运行都会考虑n两次。 只需写下:

int main() {
    int n;
    int k;
    scanf("%d", &n);
    scanf("%d", &k);
    int i = 0;
    int t = 0;
    while (i < k) {
        t = n + (t * 10);
        i++;
    }
    printf("%d", t);
}

请注意,t需要初始化,即int t = 0,否则表达式t = n + (t * 10)会导致未定义的行为。