【问题标题】:64 Bit digitsum (C) [Feel Free to edit my English]64 位数字和 (C) [随意编辑我的英语]
【发布时间】:2026-02-02 21:45:01
【问题描述】:

这是我作业的一部分,但我不知道为什么输出不正确。帮忙?

/**
 * Create a function called digitsum that takes an long integer (64                     bits) and
 * sums the value of each of its digits. i.e. the number 316 should sum to
 * 3+1+6 or 10. Return the sum as the value of the function.
 * Hints:
 * - If the number is negative, make it positive before anything else.
 * - n % 10 will give you the value of the first digit.
 * - n / 10 will shift the integer to the right one digit.
 * - You're done summing when n is zero.
 */

输入/输出示例:

 * ./p2 316
 * num = 316, sum = 10
 * ./p2 -98374534984535
 * num = -98374534984535, sum = 77
 */
#include <stdio.h>
#include <stdlib.h>

int digitsum(int n){ //first try using function
    if (n % 10)
        return digitsum == n % 10;
    else if (n / 10)
        return digitsum == n / 10; 
    else     
        return 0;  //done summing when n is zero.
}

 // Read down in the comments and do **NOT** modify main below.


int main(int argc, char **argv)
{
    int64_t n;

    if (argc < 2) {
        printf("usage: %s <int>\n", argv[0]);
        exit(1);
    }
    n = atoll(argv[1]);

    printf("num = %ld, sum = %d\n", n, digitsum(n));
    return 0;
}

当我使用 gcc 编译时,它只显示输出“sum is 310”而不是“sum is 10”?我是 C 编程新手,我还在学习..

【问题讨论】:

标签: c 64-bit sum-of-digits


【解决方案1】:

int digitsum(int n)的功能错误。

您应该在循环中添加每个数字,如以下 code

int digitsum(int64_t n){ //first try using function
    int ret = 0;
    if (n < 0)
        n = -n;
    while (n != 0) {
        ret += n % 10;
        n /= 10;
    }
    return ret;  //done summing when n is zero.
}

【讨论】:

  • 函数的重点是递归地做。它只是失败了
  • p2: -1.0 程序 (p2) 的输出对于输入 '98374534984535' 不正确: ------ 你的: ------ num = 98374534984535, sum = 40 -- -- 参考:---- num = 98374534984535, sum = 77 --------------------
  • @MikeODell 我修复它使用int64_t
【解决方案2】:

考虑递归的基本情况,如果你的数字是 0,你应该只返回 0,否则你用 n % 10 得到你的最后一个数字,然后再次调用你的函数来处理除最后一个之外的其他数字 digitsum(n / 10)

long long digitsum(long long n) { // I assume n is non-negative
    if (n == 0) return 0;   // terminal case

    return n % 10 + digitsum(n / 10);
}

【讨论】: